Sql Pivot Table-Max()与Case组合使用

Sql Pivot Table-Max()与Case组合使用,sql,tsql,pivot,case,Sql,Tsql,Pivot,Case,我有以下疑问: 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 ).va

我有以下疑问:

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(当[ID\u FK\u Group]!=null时,则使用“x”ELSE“END)
它工作得很好,但是它当然会在透视表中显示ModDate而不是“x”

我曾尝试将
case
语句的不同组合与
MAX()
结合使用,但由于某些原因,我总是会出现相同的错误:

关键字“CASE”附近的语法不正确


我遗漏了什么?

您的语法不正确,在处理空值时,您应该使用IS nullIS NOT null,并且在使用字符串值时,您应该只使用一个撇号,而不是两个撇号

将您的案例部分更改为:

MAX(CASE when [ID_FK_Group] is not null THEN 'x' ELSE ' ' END)

您可以阅读它

似乎您无法围绕
CASE
语句,因此您必须将表达式移出查询,例如

SELECT [UserDisplayName], ' + @cols + ' from 
(
    select u.DisplayName as [UserDisplayName], gm.ID_FK_Group as [ID_FK_Group],
      CASE when [ID_FK_Group] is not null THEN 'x' ELSE ' ' END tmp
    from [randomDb].[dbo].[table_user] u
    join [randomDb].[dbo].[table_GroupMembership] gm on u.id_pk_user = gm.id_fk_user
) x
pivot 
(
    MAX(tmp)
    for [ID_FK_Group] in (' + @cols + ')
) p

这很好,但这不是语法错误,错误在
CASE
部分。CASE语法本身是正确的,我已经更新了我的答案,使之与字符串部分相关。。这就是你的意思,对吗@joachimisaksson
CASE
语法是正确的,但问题似乎是您根本无法关注CASE语句。我希望您意识到@query变量是字符串文字,我非常怀疑您是否可以使用嵌套单引号。此外,正如Joachim所指出的,问题似乎不在语法范围内,而更多地是因为您显然无法在pivot中使用case语句。因此,很高兴知道这不是语法。明天我将用固定表达式尝试您的解决方案-谢谢!它的工作方式与您发布它的方式不完全相同,但总体思路似乎是正确的——现在由我来实施它。非常感谢。