如果在SELECT语句中进行比较,则使用TSQL CASE

Cyb*_*awk 41 sql t-sql select case sql-server-2008

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

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

任何帮助将不胜感激 ;)

Tec*_*hDo 50

请在外部选择中选择相同的内容.您无法在同一查询中访问别名.

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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢...我不敢相信我自己没有看到这个 :) 现在这个解决方案就在眼前,看起来很简单 :D :D :D (2认同)

Jus*_*tin 8

应该:

SELECT registrationDate, 
       (SELECT CASE
        WHEN COUNT(*)< 2 THEN 'Ama'
        WHEN COUNT(*)< 5 THEN 'SemiAma' 
        WHEN COUNT(*)< 7 THEN 'Good'  
        WHEN COUNT(*)< 9 THEN 'Better' 
        WHEN COUNT(*)< 12 THEN 'Best'
        ELSE 'Outstanding'
        END as a FROM Articles 
        WHERE Articles.userId = Users.userId) as ranking,
        (SELECT COUNT(*) 
        FROM Articles 
        WHERE userId = Users.userId) as articleNumber,
hobbies, etc...
FROM USERS
Run Code Online (Sandbox Code Playgroud)