我被卡住了,我可以使用一点输入。如何将表“Buchung”的“accountKonto”的所有值的SUM(金额)插入“Erfolg”表的一行?
“Buchung”:id accountKonto amount
“Erfolg”:id totalAmountAccountKonto1 totalAmountAccountKonto2 ...
对于“Buchung”中每个可能的“accountKonto”,“Erfolg”中有一列,我需要在其中插入总和。最后,我需要在“Erfolg”中添加一个新行,该行应该具有“Buchung”中存在的每个“accountKonto”的所有“金额”总和。有意义吗?
应该这样开始:
SELECT SUM(amount) FROM Buchung …
但是如何告诉它将每个总和放入表Erfolg的相应字段?
非常感谢你的帮助!
加里
答案 0 :(得分:2)
您应该将INSERT .. SELECT
与PIVOT
合并。
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
...然后你无法使用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关键字。如果不支持,您可以在代码中执行此操作。或者你必须做多个查询。