使用顺序CASE作为较大CASE的参数

时间:2013-08-20 04:48:42

标签: mysql sql case

SELECT CASE
WHEN
    CASE
        WHEN `AA`>6
        THEN `A`
        ELSE NULL
    END,
    CASE
        WHEN `BB`>6
        THEN `B`
        ELSE NULL
    END,
    CASE
        WHEN `CC`>6
        THEN `C`
        ELSE NULL
    END
THEN `NAME`
END
FROM TABLE;

此查询的目标是显示A到C列和名称。但如果A-C为空则不显示NAME。 我一般都是CASE和'高级'查询的新手,所以如果我把它设置成傻瓜,请随时告诉我。

感谢阅读。

注意:不编译

我想要的逻辑是:

if(
    if(AA>6) then 1 else 0
    OR
    if(BB>6) then 1 else 0
    OR
    if(CC>6) then 1 else 0
    etc,etc
   ) then 1 else 0

表:

Name    A       B        C         AA   BB  cc
--------------------------------------------------------
Name1   Data1   null    Data3       3   n   15
Name2   null    Data2   Data4       n   2   8
Name3   null    Data2   Data4       n   2   2

如果仅显示值gt 6:

,则需要输出
 Name   A      B      C
 -------------------------
 Name1              Data3
 Name2              Data4

1 个答案:

答案 0 :(得分:2)

一种方法

SELECT Name, 
       CASE WHEN aa > 6 THEN a END a,
       CASE WHEN bb > 6 THEN b END b,
       CASE WHEN cc > 6 THEN c END c
  FROM table1
 WHERE aa > 6
    OR bb > 6
    OR cc > 6

SELECT Name, 
       CASE WHEN aa > 6 THEN a END a,
       CASE WHEN bb > 6 THEN b END b,
       CASE WHEN cc > 6 THEN c END c
 FROM table1
HAVING COALESCE(a, b, c, -1) <> -1

在第二个查询中,-1只是一个常量,如果您的所有列都具有NULL值,则会返回该常量。您可以使用任何永远不会成为结果集一部分的值。在这种特殊情况下,由于您将column > 6条件应用于每个列,因此您可以使用任何小于6的数字。

输出:

|  NAME |      A |      B |     C |
-----------------------------------
| Name1 | (null) | (null) | Data3 |
| Name2 | (null) | (null) | Data4 |

这是 SQLFiddle 演示