TSQL CASE with if comparison in SELECT statement TSQL CASE with if comparison in SELECT statement sql sql

TSQL CASE with if comparison in SELECT statement


Please select the same in the outer select. You can't access the alias name in the same query.

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


Should be:

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


You can try with this:

WITH CTE_A As (SELECT COUNT(*) as articleNumber,A.UserID  as UserID FROM Articles A           Inner Join Users U           on  A.userId = U.userId            Group By A.userId , U.userId   ),B as (Select us.registrationDate,      CASE         WHEN CTE_A.articleNumber < 2 THEN 'Ama'         WHEN CTE_A.articleNumber < 5 THEN 'SemiAma'          WHEN CTE_A.articleNumber < 7 THEN 'Good'           WHEN CTE_A.articleNumber < 9 THEN 'Better'          WHEN CTE_A.articleNumber < 12 THEN 'Best'         ELSE 'Outstanding'         END as Ranking,         us.hobbies, etc...         FROM USERS Us Inner Join CTE_A          on CTE_A.UserID=us.UserID)Select * from B