如何将 SELECT SUM 中的值插入到其他 table 中?

How can I insert values from SELECT SUM into other table?

我卡住了,我可以使用一些输入。如何将 table "Buchung" 的 "accountKonto" 的所有值的 SUM(数量)插入 table "Erfolg" 的一行?

"Buchung": id accountKonto 金额

"Erfolg":id totalAmountAccountKonto1 totalAmountAccountKonto2 …

对于"Buchung"中每个可能的"accountKonto","Erfolg"中有一列,我需要在其中插入总和。最后,我需要在 "Erfolg" 中有一个新行,它应该包含 "Buchung" 中存在的每个 "accountKonto" 的所有总和 "amount"。有道理吗?

它应该这样开始:

SELECT SUM(amount) FROM Buchung …

但是我如何告诉它把每笔款项放入 table Erfolg 的相应字段?

非常感谢您的帮助!

加里

您使用的设计不是很好 - 您 运行 列的速度非常快(对于 MySQL - 大约 4k 列,取决于一点)。

我会使用聚合设计 table,类似于:

iteration | accountNr | sum

现在,要填充 table,您只需执行(将 1 替换为一些时间戳、迭代 ID,link 到一些聚合 table,您的选择):

INSERT INTO aggregate (iteration, accountNr, sum) SELECT 1, accountNr, SUM(amount) FROM data GROUP BY accountNr

现在您已经有了每次迭代的数据,您可以根据需要在界面或某些枢轴 table 中处理它。

您应该将 INSERT .. SELECTPIVOT 结合使用。

使用 PIVOT(仅在 SQL Server 和 Oracle 中可用):

SELECT *
FROM (
  SELECT accountKonto, amount
  FROM Buchung
) t
PIVOT (
  SUM(amount) FOR accountKonto IN ([1], [2], [3])
) AS p

上面的查询产生如下内容:

1      2      3
---------------------
28.00  17.00  15.35

如果您不使用 SQL 服务器:

...那么你不能使用PIVOT,但你可以很容易地模拟它:

SELECT
  SUM(CASE accountKonto WHEN 1 THEN amount END) totalAmountAccountKonto1,
  SUM(CASE accountKonto WHEN 2 THEN amount END) totalAmountAccountKonto2,
  SUM(CASE accountKonto WHEN 3 THEN amount END) totalAmountAccountKonto3
FROM Buchung

将其插入您的另一个 table:

只需使用INSERT .. SELECT如下:

INSERT INTO Erfolg (
  totalAmountAccountKonto1,
  totalAmountAccountKonto2,
  totalAmountAccountKonto3
)
SELECT p.[1], p.[2], p.[3]
FROM (
  SELECT accountKonto, amount
  FROM Buchung
) t
PIVOT (
  SUM(amount) FOR accountKonto IN ([1], [2], [3])
) AS p;

... 或者如果 PIVOT 不可用:

INSERT INTO Erfolg (
  totalAmountAccountKonto1,
  totalAmountAccountKonto2,
  totalAmountAccountKonto3
)
SELECT
  SUM(CASE accountKonto WHEN 1 THEN amount END) AS totalAmountAccountKonto1,
  SUM(CASE accountKonto WHEN 2 THEN amount END) AS totalAmountAccountKonto2,
  SUM(CASE accountKonto WHEN 3 THEN amount END) AS totalAmountAccountKonto3
FROM Buchung

检查数据库服务器文档中的 Pivot 关键字。如果不支持,您可以在代码中执行此操作。或者您必须进行多次查询。