SQL НЕ НУЛЬ для случая, когда - PullRequest
0 голосов
/ 09 января 2020

Моя текущая база данных имеет следующий формат,

| 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 " ENGLI SH "NOT NULL до конца оператора, чтобы удалить эти строки, но SQL, похоже, не распознает тот случай, когда столбцы являются реальными столбцами.

Ответы [ 3 ]

3 голосов
/ 09 января 2020

Вы можете использовать агрегацию:

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;
1 голос
/ 09 января 2020
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;

Я попробовал ожидаемый результат для вышеуказанного набора данных.

1 голос
/ 09 января 2020

Вы можете использовать агрегацию в случае, когда также

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
...