如何将 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 .. SELECT
与 PIVOT
结合使用。
使用 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 关键字。如果不支持,您可以在代码中执行此操作。或者您必须进行多次查询。
我卡住了,我可以使用一些输入。如何将 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 .. SELECT
与 PIVOT
结合使用。
使用 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 关键字。如果不支持,您可以在代码中执行此操作。或者您必须进行多次查询。