带有 concat 的 SQL Server 动态数据透视表

时间:2021-01-09 08:10:25

标签: sql-server pivot

我对 SQL Server 还是很陌生,有一个语法问题我无法弄清楚,希望有人能够就如何做到这一点提出建议。

我正在尝试编写一个动态数据透视表。

我有一个连接 nvarchar 数据的查询,结果为 @newcolumns

select @newcolumns 

返回结果:

[abc] , [def] , [ghi] , [jkl] , [mno] 

但我不知道如何将结果放入数据透视表中,例如:

select * 
from tmptable as data
pivot (count(numbers)
       for letters in (@newcolumns)) as pivotable

这会导致错误

<块引用>

'select' 附近的语法不正确

关于最后一行

python setup.py install or pip install .

如果我将粘贴 [abc] 、 [def] 、 [ghi] 、 [jkl] 、 [mno] 复制到透视查询中,透视查询有效,但我不知道如何直接使用该变量。 我如何将变量的结果(例如本例中的 @newcolumns)转换为数据透视查询可以使用的字符串格式?

完整脚本:

表格

CREATE TABLE numbersandletters 
(
    [numbers] INT,
    [letters] NVARCHAR(3)
);

INSERT INTO numbersandletters 
VALUES (1, N'abc'), (2, N'def'), (3, N'ghi'),
       (4, N'jkl'), (5, N'mno');

查询:

declare @newcolumns nvarchar(100)
declare @next nvarchar(100)

declare loop_cursor cursor for

select letters from numbersandletters

open loop_cursor

fetch next from loop_cursor into @next

While @@FETCH_STATUS = 0
Begin
    set @newcolumns = (select concat( @newcolumns,' [', @next, '] ,'))
    fetch next from loop_cursor into @next
End

close loop_cursor
Deallocate loop_cursor

set @newcolumns = (select trim(',' from @newcolumns) as result) 
select @newcolumns

--pivot

select * 
from numbersandletters as data
pivot (count(numbers)
       for letters in (@newcolumns)) as pivottable

-或者如果格式需要在它周围有括号,也可以在修剪后包含 set @newcolumns =(select concat('(', @newcolumns, ')'))

0 个答案:

没有答案
相关问题