我想在SELECT中使用CASE语句.
我从用户表中选择,并且(作为一个属性)我也使用嵌套SQL:
SELECT
registrationDate,
(SELECT COUNT(*) FROM Articles WHERE userId = Users.userId) as articleNumber,
hobbies, ...
FROM USERS
Run Code Online (Sandbox Code Playgroud)
然后我想做一个CASE语句来获得用户的排名(排名取决于articleNumber).
我试过这样的:
SELECT
registrationDate,
(SELECT COUNT(*) FROM Articles WHERE Articles.userId = Users.userId) as articleNumber,
ranking =
CASE
WHEN articleNumber < 2 THEN 'Ama'
WHEN articleNumber < 5 THEN 'SemiAma'
WHEN articleNumber < 7 THEN 'Good'
WHEN articleNumber < 9 THEN 'Better'
WHEN articleNumber < 12 THEN 'Best'
ELSE 'Outstanding'
END,
hobbies, etc...
FROM USERS
Run Code Online (Sandbox Code Playgroud)
解析显示没有错误,但当我尝试运行它时,我收到错误:
消息207,级别16,状态1,过程GetUserList,行XY
无效列名称'articleNumber'.
我想,CASE不会"识别"我的嵌套SELECT.
我帮助自己使用其他一些解决方案,如 SQL Server 2008 …
我的SQL语句有问题:当我使用order by时,我使用SELECT语句然后使用CASE.
SELECT .....
ORDER BY
CASE WHEN @sort = 'ND' THEN name END DESC,
CASE WHEN @sort = 'NA' THEN name END,
CASE WHEN @sort = 'AD' THEN (isAuthorized) END DESC,
CASE WHEN @sor = 'AA' THEN (isAuthorized) END
Run Code Online (Sandbox Code Playgroud)
isAuthorized是一个BIT值,所以我想在那里使用二级订单.
我尝试过类似的东西:
SELECT .....
ORDER BY
CASE WHEN @sort = 'ND' THEN name END DESC,
CASE WHEN @sort = 'NA' THEN name END,
CASE WHEN @sort = 'AD' THEN (isAuthorized, name ) END DESC,
CASE WHEN @sort = 'AA' THEN …Run Code Online (Sandbox Code Playgroud)