我想在SELECT中使用CASE语句。
我从用户表中选择,并且(作为一个属性)我也使用嵌套的SQL:
SELECT registrationDate, (SELECT COUNT(*) FROM Articles WHERE userId = Users.userId) as articleNumber, hobbies, ... FROM USERS
然后我想做一个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
解析不会显示任何错误,但是当我尝试运行它时会出现错误:
消息207,级别16,状态1,过程GetUserList,行XY 无效的列名称“ articleNumber”。
我想,CASE无法“识别”我的嵌套SELECT。
我为自己提供了其他一些解决方案,例如 SQL Server 2008-Case / If SELECT子句中的语句, 但似乎没有任何效果。
我也没有发现’<’和’>’比较有任何类似的问题。
任何帮助将不胜感激 ;)
请在外部选择中选择相同的内容。您不能在同一查询中访问别名。
SELECT *, (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) AS ranking FROM( SELECT registrationDate, (SELECT COUNT(*) FROM Articles WHERE Articles.userId = Users.userId) as articleNumber, hobbies, etc... FROM USERS )x