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

时间:2015-05-10 19:01:56

标签: mysql sql sql-server filemaker

我被卡住了,我可以使用一点输入。如何将表“Buchung”的“accountKonto”的所有值的SUM(金额)插入“Erfolg”表的一行?

“Buchung”:id accountKonto amount

“Erfolg”:id totalAmountAccountKonto1 totalAmountAccountKonto2 ...

对于“Buchung”中每个可能的“accountKonto”,“Erfolg”中有一列,我需要在其中插入总和。最后,我需要在“Erfolg”中添加一个新行,该行应该具有“Buchung”中存在的每个“accountKonto”的所有“金额”总和。有意义吗?

应该这样开始:

SELECT SUM(amount) FROM Buchung …

但是如何告诉它将每个总和放入表Erfolg的相应字段?

非常感谢你的帮助!

加里

3 个答案:

答案 0 :(得分:2)

您应该将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 Server:

...然后你无法使用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

将其插入您的其他表:

只需使用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

答案 1 :(得分:0)

你使用的设计不是很好 - 你的列快速耗尽(对于MySQL - 大约4k列,取决于一点)。

我将设计用于聚合​​表,类似于:

iteration | accountNr | sum

现在,要填写表格,你只需要做(用一些时间戳,迭代ID替换1,链接到某些聚合表,你的选择):

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

现在您已经拥有了每次迭代的数据,您可以根据需要在接口或某些数据透视表中处理它。

答案 2 :(得分:0)

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