小编典典

TSQL CASE与SELECT语句中的if比较

sql

我想在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子句中的语句,
但似乎没有任何效果。

我也没有发现’<’和’>’比较有任何类似的问题。

任何帮助将不胜感激 ;)


阅读 172

收藏
2021-04-15

共1个答案

小编典典

请在外部选择中选择相同的内容。您不能在同一查询中访问别名。

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
2021-04-15