0
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 和名称。但如果 AC 为空,则不显示 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
4

1 回答 1

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

输出:

| 姓名 | 一个 | 乙| C |
----------------------------------
| 姓名1 | (空) | (空) | 数据3 |
| 姓名2 | (空) | (空) | 数据4 |

这是SQLFiddle演示

于 2013-08-20T05:06:57.637 回答