1

[評価] 列によるグループ化で問題が発生しています。実行すると、「無効な列名 'rate'」と表示されます。

誰でも私を助けることができますか?ありがとう!!

SELECT
     ......
   CASE
         WHEN level_1 = 'Corporate'
         THEN 
            CASE
            WHEN ssr.rating = 'A' OR ssr.rating LIKE 'A[+-]'
            THEN 'Corp A'

            WHEN ssr.rating = 'AA' OR ssr.rating LIKE 'AA[+-]'
            THEN 'Corp AA'

            WHEN ssr.rating = 'BBB' OR ssr.rating LIKE 'BBB[+-]'
            THEN 'Corp BBB'

            ELSE NULL
        END

            WHEN level_1 = 'Government' AND level_2 = 'Provincial'
            THEN 'Prov'

            WHEN level_1 = 'Government' AND level_2 = 'Federal'
            THEN 'Canada'

       ELSE NULL
   END AS rating,
     ......
  SUM(...)
     .......
FROM....
GROUP BY rating
4

3 に答える 3

0

最も簡単な方法は、サブクエリを使用することです。

select rating, .  .
from (SELECT
     ......
   CASE
         WHEN level_1 = 'Corporate'
         THEN 
            CASE
            WHEN ssr.rating = 'A' OR ssr.rating LIKE 'A[+-]'
            THEN 'Corp A'

            WHEN ssr.rating = 'AA' OR ssr.rating LIKE 'AA[+-]'
            THEN 'Corp AA'

            WHEN ssr.rating = 'BBB' OR ssr.rating LIKE 'BBB[+-]'
            THEN 'Corp BBB'

            ELSE NULL
        END

            WHEN level_1 = 'Government' AND level_2 = 'Provincial'
            THEN 'Prov'

            WHEN level_1 = 'Government' AND level_2 = 'Federal'
            THEN 'Canada'

       ELSE NULL
   END AS rating,
   *
 from . . .
) t
group by rating;

これは、MySQL や Access を含むすべてのデータベースで機能します。欠点は、一部のデータベースがサブクエリを派生テーブルとして扱い、実際には中間結果を保存することです。不適切な SQL エンジンの実装は考慮されていません。そのような場合、そのオーバーヘッドを回避したい場合は、group byステートメントでケースを繰り返す必要があります。ratingまた、でを受け入れるデータベースは存在しますがgroup by、ごくわずかです。

于 2013-05-17T02:30:07.457 に答える