在末尾添加总计列,用于动态数据透视 SQL 服务器查询
Add total column at the end, for a dynamic pivot SQL Server query
我可以设法在 SQL 服务器中进行动态数据透视查询,如下所示:
DECLARE @sql nvarchar(max),
@columns nvarchar(max)
SELECT @columns = STUFF((SELECT DISTINCT ',' + QUOTENAME(nationality)
FROM NewComers
FOR XML PATH('')), 1, 1, '')
SELECT @sql = 'SELECT p.registrationdate, '+ @columns +
' FROM (SELECT s.registrationdate, s.Nationality FROM newcomers s) AS t
PIVOT (
COUNT(Nationality) FOR nationality IN (' + @columns+ ')) p'
EXEC (@sql)
我的问题是我想在结果末尾添加一列。所以目前我得到这个结果:
registrationdate GER TUR CAN AUS
------------------ ----- ----- ----- -----
16/11/2016 10 8 6 7
21/08/2020 4 5 3 2
08/04/2019 1 3 5 0
我需要这样的结果:
registrationdate GER TUR CAN AUS Total
------------------ ----- ----- ----- ----- -------
16/11/2016 10 8 6 7 31
21/08/2020 4 5 3 2 14
08/04/2019 1 3 5 0 9
我在 Stack Overflow 中尝试了几种解决方案,但都没有奏效。
感谢您的帮助:)
您能否将 Total 添加为新手 table 的联合行,然后手动将“Total”字符串添加到您的@columns 变量?
基本上创建一个新人 table 的 CTE,其中有一个工会,该工会按您的日期分组并对总数求和,并将“总计”一词粘贴到国籍栏中。
然后只需将总计添加到您的@columns 字符串中即可将其转出。
是这样的吗?我目前无法访问 SQL 服务器以对其进行测试。
DECLARE @sql nvarchar(max),
@columns nvarchar(max)
SELECT @columns = STUFF((SELECT DISTINCT ',' + QUOTENAME(nationality)
FROM NewComers
FOR XML PATH('')), 1, 1, '')
SELECT @sql = '
;with CTE as (
select registrationdate, Nationality, count(Nationality) as Cnt from newcomers group by registrationdate, Nationality
union all
select registrationdate, ''Total'', count(Nationality) as Cnt from newcomers group by registrationdate
)
SELECT p.registrationdate, '+ @columns + ', Total' +
' FROM (SELECT registrationdate, Nationality, Cnt FROM CTE) AS t
PIVOT (
max(Cnt) FOR nationality IN (' + @columns+ ',Total)) p'
EXEC (@sql)
我可以设法在 SQL 服务器中进行动态数据透视查询,如下所示:
DECLARE @sql nvarchar(max),
@columns nvarchar(max)
SELECT @columns = STUFF((SELECT DISTINCT ',' + QUOTENAME(nationality)
FROM NewComers
FOR XML PATH('')), 1, 1, '')
SELECT @sql = 'SELECT p.registrationdate, '+ @columns +
' FROM (SELECT s.registrationdate, s.Nationality FROM newcomers s) AS t
PIVOT (
COUNT(Nationality) FOR nationality IN (' + @columns+ ')) p'
EXEC (@sql)
我的问题是我想在结果末尾添加一列。所以目前我得到这个结果:
registrationdate GER TUR CAN AUS
------------------ ----- ----- ----- -----
16/11/2016 10 8 6 7
21/08/2020 4 5 3 2
08/04/2019 1 3 5 0
我需要这样的结果:
registrationdate GER TUR CAN AUS Total
------------------ ----- ----- ----- ----- -------
16/11/2016 10 8 6 7 31
21/08/2020 4 5 3 2 14
08/04/2019 1 3 5 0 9
我在 Stack Overflow 中尝试了几种解决方案,但都没有奏效。
感谢您的帮助:)
您能否将 Total 添加为新手 table 的联合行,然后手动将“Total”字符串添加到您的@columns 变量?
基本上创建一个新人 table 的 CTE,其中有一个工会,该工会按您的日期分组并对总数求和,并将“总计”一词粘贴到国籍栏中。
然后只需将总计添加到您的@columns 字符串中即可将其转出。
是这样的吗?我目前无法访问 SQL 服务器以对其进行测试。
DECLARE @sql nvarchar(max), @columns nvarchar(max) SELECT @columns = STUFF((SELECT DISTINCT ',' + QUOTENAME(nationality) FROM NewComers FOR XML PATH('')), 1, 1, '') SELECT @sql = ' ;with CTE as ( select registrationdate, Nationality, count(Nationality) as Cnt from newcomers group by registrationdate, Nationality union all select registrationdate, ''Total'', count(Nationality) as Cnt from newcomers group by registrationdate ) SELECT p.registrationdate, '+ @columns + ', Total' + ' FROM (SELECT registrationdate, Nationality, Cnt FROM CTE) AS t PIVOT ( max(Cnt) FOR nationality IN (' + @columns+ ',Total)) p' EXEC (@sql)