0

我有一个 case 语句,它在列中返回空值,而在执行 case 语句时我不想要空值。

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

Column_name 也返回空值

所以我将查询更改为

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)and if somethingwould have generated a NULL,您将得到 0 。

于 2012-04-27T05:27:42.837 回答