如何在 SQL 查询中求和后保留列名

How to keep column name after sum aggregation in SQL query

我正在查询 SQL 服务器,其中我有多个具有总和聚合的列。我想知道是否有办法在对每个列进行求和后保留列名。

我想避免在所选列之后立即使用别名,因为别名的编号和名称会随着时间而改变。

我的结果示例:

我的查询:

DECLARE @SQLQUERY AS NVARCHAR(MAX)

DECLARE @PivotColumns AS NVARCHAR(MAX)
DECLARE @SumColumns as NVARCHAR(MAX)

SELECT @PivotColumns = COALESCE(@PivotColumns + ',','') + QUOTENAME(description)
FROM [example-base].dbo.table

SELECT @SumColumns = 'sum('+Replace(@PivotColumns,',','),sum(')+')'

SET @SQLQUERY = N'SELECT TOP(100) Weeks, Years, Code,'+@SumColumns+ '
FROM [example-base].dbo.table
group by Weeks,Years,Code'

EXECUTE sp_executesql @SQLQUERY

有没有办法保留完成总和的列名?

...工会..?

SET @SQLQUERY = N'
SELECT TOP(0) Weeks, Years, Code,'+@PivotColumns+ '
FROM [example-base].dbo.table
UNION ALL
SELECT TOP(100) Weeks, Years, Code,'+@SumColumns+ '
FROM [example-base].dbo.table
group by Weeks,Years,Code'

通过使用文本构建查询,注意潜在的性能问题。此外,您的结果可能无法预测,而列数可能会在两次执行之间发生变化。

要为您的列添加别名,您可以使用此语句:

DECLARE @SumColumns AS nvarchar(MAX);

SELECT @SumColumns = CONCAT(COALESCE(@PivotColumns + ',', ''), 'SUM(', QUOTENAME(description), ') AS ', QUOTENAME(description))
FROM [example-base].dbo.table