44

SELECTでCASE文を使いたいです。

ユーザー テーブルから選択し、(1 つの属性として) ネストされた 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 statement in SELECT Clauseのような他のいくつかのソリューションを手伝いまし たが、何も機能していないようです。

「<」と「>」の比較でも同様の問題は見つかりませんでした。

どんな助けでも大歓迎です;)

4

3 に答える 3

57

アウターセレクトで同じものを選んでください。同じクエリでエイリアス名にアクセスすることはできません。

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
于 2013-01-09T08:53:57.380 に答える
9

次のようにする必要があります。

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
于 2013-01-09T09:00:04.447 に答える