【发布时间】:2016-05-18 08:05:42
【问题描述】:
我正在编写一个必须生成数据透视表的查询。现在下面是我的代码。
select *
from
(select [case owner], [time taken(minutes)] from StatusTable) as pivotdata
pivot(
sum([time taken(minutes)])
for [CASE OWNER] in
("XXX", "AAA", "BBB")
) as pivoting
但是我不需要在for-in 中给出行,而是需要动态获取,我在这里看到了一个查询SQL Server dynamic PIVOT query? 并将我的查询修改为
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME([case owner])
FROM StatusTable c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'select *
from
(select [case owner], [time taken(minutes)] from StatusTable) as pivotdata
pivot(
sum([time taken(minutes)])
for [CASE OWNER] in
('+@cols+')
) as pivoting'
execute(@query)
这很好用,但问题是我必须在我的 JDBC 程序中使用这个查询。如果不使用execute(@query),它就不会在我的 SQL Server 中运行。我可以使这个查询类似于第一个查询,以便我可以在我的程序中使用相同的查询吗?
【问题讨论】:
-
要执行
dynamic query/SQL string,您需要EXECUTE或EXEC SP_EXECUTESQL没有其他方法 -
如果不通过 SP_EXECUTESQL 或 EXECUTE (EXEC) 命令执行@query,则只有 NVARCHAR 类型的字符串变量。
标签: java sql-server jdbc mssql-jdbc