我有以下查询:
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)
,它可以正常工作,但当然它会在数据透视表中显示moddate而不是“x”。
我尝试将case
语句的不同组合与MAX()
结合使用,但出于某种原因,我总是遇到同样的错误:
关键字'CASE'附近的语法不正确。
我错过了什么?
答案 0 :(得分:2)
似乎你无法转移MyClass c1 = new MyClass(f1=2.1 , f48=3.5);
MyClass c2 = new MyClass(f4=5 , f30=12.9);
public class MyClass{
double f1;
double f2;
double f3;
...
double f60;
}
语句,所以你必须将表达式移到查询中,例如;
CASE
答案 1 :(得分:0)
语法不正确,处理空值时应使用 IS NULL 和 IS NOT NULL ,使用字符串时也应该只使用一个撇号而不是两个值。
将您的案例部分更改为:
MAX(CASE when [ID_FK_Group] is not null THEN 'x' ELSE ' ' END)
您可以阅读here