【发布时间】:2016-05-31 01:02:44
【问题描述】:
我有以下查询:
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(ID_FK_Group)
from [randomDb].[dbo].[table_GroupMembership]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT [UserDisplayName], ' + @cols + ' from
(
select u.DisplayName as [UserDisplayName], gm.ID_FK_Group as [ID_FK_Group], gm.ModDate as [ModDate]
from [randomDb].[dbo].[table_user] u
join [randomDb].[dbo].[table_GroupMembership] gm on u.id_pk_user = gm.id_fk_user
) x
pivot
(
MAX(CASE when [ID_FK_Group] != null THEN "x" ELSE " " END)
for [ID_FK_Group] in (' + @cols + ')
) p '
execute(@query)
如果我使用MAX([ModDate]) 而不是MAX(CASE when [ID_FK_Group] != null THEN "x" ELSE " " END) 它工作得很好,但当然它会在数据透视表中显示修改日期而不是“x”。
我尝试过将 case 语句与 MAX() 结合使用的不同组合,但由于某种原因,我总是会遇到相同的错误:
关键字“CASE”附近的语法不正确。
我错过了什么?
【问题讨论】: