0

列にnull値を返すcaseステートメントがありますが、caseステートメントの実行時にnull値は必要ありません。

SELECT ABC
(
CASE 
 WHEN 
 condition
 THEN 1
 WHEN
condition2
 THEN 2 
 END
 ) AS column_name FROM tablename;

Column_nameはnull値も返します

だから私はクエリをに変更しました

SELECT ABC
(
CASE 
 WHEN 
 condition
 THEN 1
 WHEN
condition2
 THEN 2 
 else 3
 END
 ) AS column_name FROM tablename where column_name <>3;

「無効な識別子」というエラーが表示されます。

これについて何か考えはありますか?

4

2 に答える 2

2

後にコンマがありませんABC(それが列であると仮定しABCます):

SELECT ABC ,                          --<---- comma added here
  (
  CASE 
    WHEN 
      condition
    THEN 1
    WHEN
      condition2
    THEN 2 
    ELSE 3
  END
  ) AS column_name 
FROM tablename;

これらの括弧を削除することもできますが、実際には必要ありません。


なぜそれを追加したのかは明らかではありませんWHERE column_name <> 3。あなたの調整CASEはそれらNULLをに変えまし3た。それらの行を表示しますか?はいの場合、上記のようにクエリを保持します。そうでない場合は、これを使用できます。

SELECT 
  ABC , 
  CASE 
    WHEN 
      condition
    THEN 1
    WHEN
      condition2
    THEN 2 
    ELSE 3
  END AS column_name 
FROM tablename
WHERE (condition) OR (condition2) ; 

または(それはあなたの論理に近いです):

SELECT *
FROM
  ( SELECT 
      ABC , 
      CASE 
        WHEN 
          condition
        THEN 1
        WHEN
          condition2
        THEN 2 
        ELSE 3
      END AS column_name 
    FROM tablename
  ) AS tmp
WHERE column_name <> 3 ;
于 2012-04-27T05:45:26.180 に答える
1

を使用でき、を生成したNVL(something, 0)場合は、代わりに0を取得します。somethingNULL

于 2012-04-27T05:27:42.837 に答える