我对 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, ')'))
。