51

case/when を頻繁に使用する巨大なクエリがあります。ここにこの SQL がありますが、これは機能しません。

 (select case when xyz.something = 1
 then
     'SOMETEXT'
 else
      (select case when xyz.somethingelse = 1)
      then
          'SOMEOTHERTEXT'
      end) 

      (select case when xyz.somethingelseagain = 2)
      then
          'SOMEOTHERTEXTGOESHERE'
      end)
 end) [ColumnName],

問題の原因はxyz.somethingelseagain = 2、その式をバインドできなかったということです。xyz は、クエリでさらに下に結合されるテーブルのエイリアスです。ここで何が問題なのですか?2 つの case/whens の 1 つを削除するとそれが修正されますが、両方が必要であり、おそらくさらに多くのケースが必要です。

4

4 に答える 4

105
SELECT
   CASE 
   WHEN xyz.something = 1 THEN 'SOMETEXT'
   WHEN xyz.somethingelse = 1 THEN 'SOMEOTHERTEXT'
   WHEN xyz.somethingelseagain = 2 THEN 'SOMEOTHERTEXTGOESHERE'
   ELSE 'SOMETHING UNKNOWN'
   END AS ColumnName;
于 2010-07-27T09:45:06.300 に答える
8

WHEN ステートメントが true になるとすぐに、ブレークは暗黙的になります。

どの WHEN 式が発生する可能性が最も高いかを検討する必要があります。WHEN ステートメントの長いリストの最後にその WHEN を配置すると、SQL が遅くなる可能性があります。だから最初にそれを前に出してください。

詳細はこちら: T-SQL の case ステートメントでブレークする

于 2012-10-30T14:57:02.913 に答える