>我有这个:
DECLARE
@columns NVARCHAR(MAX) = '',
@sql NVARCHAR(MAX) = '';
SELECT @columns += QUOTENAME(CAST(ondate as date)) + ','
FROM AuditLogUnique
WHERE CAST(ondate as date) >= '06/22/2020'
ORDER BY CAST(ondate as date)
SET @columns = LEFT(@columns, LEN(@columns) - 1);
SET @sql = '
SELECT * FROM
(
SELECT systemuserid, COUNT(systemuserid) FROM [AuditLogUnique]
WHERE CAST(ondate as date) >= ''06/22/2020''
GROUP BY systemuserid
) t
PIVOT(
COUNT(systemuserid)
FOR CAST(ondate as date) IN ('+ @columns +')
) AS pivot_table;';
EXECUTE sp_executesql @sql;
它失败,"("附近的语法不正确。
这是我第一次尝试使用 PIVOT,但不确定如何调试它。
谢谢。
只需在执行动态 SQL 之前添加打印,您就可以通过单独运行代码来找出错误。
以下几点可能会有所帮助:
在准备@columns
时应使用distinct
,否则在后面的部分可能会失败。
在旋转之前,也可以在选择中使用ondate
。
不要在pivot
内部使用cast
,而是使@columns
类似于原始ondate
列。