SQL:包含多个字段的Case语句

Mig*_*idy 3 sql group-by case

我正在尝试使用CASE语句编写GROUP BY子句,因此我可以根据查询中的参数值有条件地使用GROUP BY.这是我正在使用的查询(显着缩短)并且我一直得到"RVPname在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.并且DVPname无效且AEname无效.

SELECT
DVPname, RVPname, AEname, Dealer, Product, Distribution, 

CASE WHEN @LEVEL = 'DVP' THEN DVPname
WHEN @LEVEL = 'RVP' THEN RVPname
WHEN @LEVEL = 'AE' THEN AEname
END AS NAME

..........other code here.....

GROUP BY Product, Distribution,
CASE WHEN @LEVEL = 'RVP' THEN AEname WHEN @LEVEL = 'DVP' THEN RVPname WHEN @LEVEL= 'AE' THEN Dealer END
Run Code Online (Sandbox Code Playgroud)

- 有谁知道如何做我想要完成的事情.当LEVEL ='DVP'时我想要GROUP BY RVPname,当LEVEL ='RVP'时我想要GROUP BY AEname ....有意义吗?

qua*_*tka 8

没有聚合的查询分组(例如您的查询)仅对删除重复项有用.因此,您可以选择为select子句中的列添加聚合,这些列不在组中,或者使用查询来删除重复项.

以下代码删除了仅在group by语句中有条件的所有列(DVPname,RVPname,AEname,Dealer)(只要它们不在group by中,它就会在select中出现错误).它还将名称添加到组中,以便它可以在select子句中.

SELECT
Product, Distribution,
CASE 
    WHEN @LEVEL = 'DVP' THEN DVPname
    WHEN @LEVEL = 'RVP' THEN RVPname
    WHEN @LEVEL = 'AE' THEN AEname
END AS NAME,
CASE 
     WHEN @LEVEL = 'RVP' THEN AEname 
     WHEN @LEVEL = 'DVP' THEN DVPname 
     WHEN @LEVEL= 'AE' THEN Dealer 
END 

..........other code here.....

GROUP BY Product, Distribution, 
CASE 
    WHEN @LEVEL = 'DVP' THEN DVPname
    WHEN @LEVEL = 'RVP' THEN RVPname
    WHEN @LEVEL = 'AE' THEN AEname
END,
CASE 
     WHEN @LEVEL = 'RVP' THEN AEname 
     WHEN @LEVEL = 'DVP' THEN DVPname 
     WHEN @LEVEL= 'AE' THEN Dealer 
END 
Run Code Online (Sandbox Code Playgroud)