2012-04-27 93 views
0

我有一个case语句,它在列中返回空值,而我不想在执行case语句时使用空值。Case语句不应该返回空值

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

列名返回空值以及

所以我改变了查询

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

我得到一个错误 '无效的标识符'。

对此有何看法?

+1

什么是ABC?您创建的功能? – Thilo 2012-04-27 05:31:00

+0

ABC:列名称 – user1208862 2012-04-27 05:47:25

+0

然后你缺少一个逗号。 – Thilo 2012-04-27 06:13:26

回答

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 ; 
+0

肯定..会这样做.. – user1208862 2012-04-27 05:50:20

+0

它的工作... Thanksssssss – user1208862 2012-04-27 06:18:08

1

您可以使用NVL(something, 0),如果something本来会生成NULL,您将得到0代替。

+0

我不想要没有1或2的行。我只能得到只有1或2的行。 – user1208862 2012-04-27 05:49:08

+0

这就是'WHERE'子句的用途。 – StilesCrisis 2012-04-27 14:15:47