使用 CASE 按多列分组时出错

K09*_*K09 0 sql-server t-sql group-by

是否可以在 CASE 语句中按多个列进行分组?我收到错误“',' 附近的语法不正确。” 在下面的代码...

SELECT
  CASE 
     WHEN Type = 'Test'
       THEN Description
     ELSE MAX([Description])                
  END AS 'Description'
GROUP BY
CASE
    WHEN Type = 'Test'
        THEN Description
    ELSE ''
END,
Type, Account, Structure    
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 6

我想当Type具有特定值 ( 'Test') 时,您希望将StructureDescription列考虑用于分组,否则根本不使用它们。这是执行此操作的一种方法:

GROUP BY
    Type, Account,
    CASE WHEN Type = 'Test' THEN Structure ELSE '' END, 
    CASE WHEN Type = 'Test' THEN Description ELSE '' END
Run Code Online (Sandbox Code Playgroud)

''应该是具有同一数据类型的(任何)常量表达式StructureDescription分别。

或者,您可以将这两种情况分开,这将使您更灵活地调整SELECT列表:

SELECT 
    ---
FROM
    ---
WHERE
    Type = 'Test'
GROUP BY
    Type, Account, Structure, Description

UNION ALL

SELECT 
    ---
FROM
    ---
WHERE
    (Type <> 'Test' OR Type IS NULL)
GROUP BY
    Type, Account ;
Run Code Online (Sandbox Code Playgroud)