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
答案 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 演示