Несколько операторов CASE WHEN, выводящих только одну строку - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать запрос Oracle, который выводит двадцать строк.Каждая строка (name_x) должна иметь только одно значение вне col_a1 и col_a2.Каждый раз, когда я запускаю запрос ниже, я получаю только 1 строку.и «имя_1» - «имя_20» приводят к нулям, но имя_Т публикуется успешно.

SELECT col_a1, col_a2, 
Coalesce (max(name_1),0) name_1,
Coalesce (max(name_2),0) name_2,
Name_t
...

FROM(
SELECT 
CASE WHEN b.col_b1 = 'Y' and a.col_a3 = 'X' THEN a.col_a4 ELSE NULL END name_1,
CASE WHEN b.col_b1 = 'Y' and a.col_a3 = 'X2' THEN a.col_a4 ELSE NULL END name_2,
…
CASE WHEN a.col_A3 = 'Z' then a.col_a4 else null name_T
FROM dbA.TbA a  
LEFT OUTER JOIN (SELECT * FROM dbB.TbB Where X) b
ON a.col_W = b.col_W
)
Group by col_a1, col_a2

Хорошо, прочитав комментарии, я вернулся и исправил несколько ошибок, связанных с тем, что мой подзапрос не был 'т работает.Я впервые смог правильно опубликовать подзапрос!Теперь я не могу 'GROUP BY col_a1, col_a2' и получить ошибку неверного идентификатора, над которой я сейчас работаю.

1 Ответ

0 голосов
/ 24 сентября 2018

Я думаю, вы забыли добавить col_a1, col_a2 в свой подзапрос.

SELECT col_a1, col_a2, 
Coalesce (max(name_1),0) name_1,
Coalesce (max(name_2),0) name_2,
Name_t
...

FROM(
SELECT 
col_a1, col_a2,
CASE WHEN b.col_b1 = 'Y' and a.col_a3 = 'X' THEN a.col_a4 ELSE NULL END name_1,
CASE WHEN b.col_b1 = 'Y' and a.col_a3 = 'X2' THEN a.col_a4 ELSE NULL END name_2,
…
CASE WHEN a.col_A3 = 'Z' then a.col_a4 else null name_T
FROM dbA.TbA a  
LEFT OUTER JOIN (SELECT * FROM dbB.TbB Where X) b
ON a.col_W = b.col_W
)
Group by col_a1, col_a2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...