【问题标题】:SQL IS NOT NULL for CASE WHEN对于 CASE WHEN,SQL 不为空
【发布时间】:2020-01-09 10:42:26
【问题描述】:

我当前的数据库格式如下,

| question_id |Tag  | Question  |
|      -      |-   --|--        -|
|1            | EN   | DOG       |
|1            | DE   | HUND      |

我正在尝试创建一个结果,例如;

| question_id |English  | German    |
|      -      |-      --|--        -|
|1            | DOG     | HUND       |

我目前在设置时有一个案例;

select  question_id
  , CASE WHEN tag = 'en'
               THEN text
          END AS "ENGLISH",
   CASE WHEN tag = 'de'
              THEN text
          END AS "GERMAN"
from table

问题是因为我有两种情况,它最终会返回重复的行

  | question_id |English  | German    |
|      -      |-      --|--        -|
|1            | NULL     | HUND       |
|1            | DOG     | NULL       |

我尝试解决这个问题,是在语句末尾添加 WHERE "ENGLISH" IS NOT NULL 以删除这些行,但是当列是真实列时,SQL 似乎无法识别这种情况。

【问题讨论】:

    标签: sql postgresql null case


    【解决方案1】:

    你可以使用聚合:

    SELECT question_id,
           max(text) FILTER (WHERE tag = 'en') AS english,
           max(text) FILTER (WHERE tag = 'de') AS german
    FROM atable
    GROUP BY question_id;
    

    【讨论】:

      【解决方案2】:

      你也可以在 case when 中使用聚合

      select  question_id
        , max(CASE WHEN tag = 'en'
                     THEN text
                END )AS ENGLISH,
         max (CASE WHEN tag = 'de'
                    THEN text
                END) AS GERMAN
      from table group by question_id
      

      【讨论】:

        【解决方案3】:
        CREATE TABLE test_table(question_id NUMBER,
        tag VARCHAR2(10),
        question VARCHAR2(10));
        
        INSERT INTO test_table VALUES(1,'EN','DOG');
        INSERT INTO test_table VALUES(1,'DE','HUND');
        
        COMMIT;
        
        
        SELECT QUESTION_ID,
        MAX(CASE WHEN TAG='EN' THEN QUESTION END) AS ENGLISH,
        MAX(CASE WHEN TAG='DE' THEN QUESTION END) AS GERMAN
        FROM test_table
        GROUP BY QUESTION_ID;
        

        我尝试了上述样本数据集的预期结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-17
          • 2017-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多