gpt4 book ai didi

sql - 如何对 SQL Server 中的动态列求和?

转载 作者:行者123 更新时间:2023-12-04 12:50:59 25 4
gpt4 key购买 nike

假设我有一个包含 3 列的表格。在不指定列名的情况下,是否可能存在每列的总和?

是否有可能创建一个表,其中包含列的动态名称,然后是每列的总和?

更新:这是我的示例。首先,我进行查询并得到如下结果:

---------
| Col |
---------
| DLX |
| SUI |
| PRE |
| TWQ |
---------

行数可能每次都不同,然后我创建了一个表,其中的列来自上面的行,如下所示:

---------------------------------
| DLX | SUI | PRE | TWQ |
---------------------------------

然后我从另一个表中填充数据到表中。毕竟,我对每一列求和。因为我不知道列的确切名称,所以我需要每列的总和而不指定列的名称。

最佳答案

如果您的表格很小(即 10 列),我会手动完成。但如果它有 20 多个列,我会使用一些动态 sql。

直接回答你的问题,是的,你可以使用动态sql动态创建一个包含动态列名的表。

这是一种方法:您可以使用 INFORMATION_SCHEMA.COLUMNS View 获取所有列名并将它们放在临时表中。

SELECT NAME INTO #COLUMNS 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = YourTable

接下来,创建一个临时表来存储您的总和。

CREATE TABLE #SUMS (
COLUMN_NAME NVARCHAR(MAX),
SUM_COLUMN INT
)

然后您可以使用动态 sql 和循环对每一列求和。

WHILE EXISTS(SELECT TOP 1 * FROM #COLUMNS)
BEGIN
DECLARE @COLUMN NVARCHAR(MAX) = (SELECT TOP 1 * FROM #COLUMNS)
DECLARE @DYNAMICSQL NVARCHAR(MAX) = N'SELECT ' + @COLUMN + ' AS COLUMN_NAME, SUM(' + @COLUMN + ') FROM YourTable'

INSERT INTO #SUMS
EXEC SP_EXECUTESQL @DYNAMICSQL

DELETE FROM #COLUMNS
WHERE NAME = @COLUMN
END

然后您将需要另一个动态 sql 和循环来遍历新表并使用总和值和您想要的表名创建一个包含您想要的列名的临时表。

您应该能够使用上面已经提供的代码来做到这一点。

关于sql - 如何对 SQL Server 中的动态列求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com