Правильный запрос для возврата 1 строки вместо дубликатов, когда 2 столбца из многих постоянны - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть запрос с двумя постоянными столбцами и другой столбец с другими значениями.

У меня проблемы с запросом Informix, где для того же идентификатора и имени я получаю> 1 строк, возвращаемых из-за 3-го выбора, который вызывает дубликаты.

например, мой запрос как показано ниже

select
x.id,
x.name
case when (y.tag = 'a') then z.value else '' as A
case when (y.tag = 'b') then z.value else '' as B
case when (y.tag = 'c') then z.value else '' as C
...

From
table x,
join table y on (x.<something> = y.<something>)
join table z on (y.<something> = z.<something>)

Where
x.name = "Test"

Результат запроса возвращает 3 строки. Каждая строка имеет значение A, B или C. Идентификатор и имя всегда одинаковы и будут.

По сути, вместо того, чтобы возвращать 1 строку со всеми заполненными столбцами, возвращается 3 из-за различных условий z.value

Я хочу объединить 3 строки в 1, если это имеет смысл. Должно быть что-то простое или глупое, что мне не хватает, что могло бы легко это исправить. Помогите, пожалуйста :) Спасибо


Извинения, я добавил результат моего примера запроса, чтобы лучше объяснить, что он делает, стихи о том, что я хочу:

Результат, который я получаю

id   123
name qwe
A    z
B
C

id   123
name qwe
A
B    y
C

id   123
name qwe
A
B
C    x

3 Rows retrieved.

Результат хочу

id   123
name qwe
A    z
B    y
C    x

1 Row retrieved

Надеюсь, что проясняет любую двусмысленность

1 Ответ

0 голосов
/ 08 ноября 2018

Я подозреваю, что вы просто хотите агрегировать:

select x.id, x.name
       max(case when (y.tag = 'a') then z.value end) as A,
       max(case when (y.tag = 'b') then z.value end) as B,
       max(case when (y.tag = 'c') then z.value end) as C,
       ...
from table x join
     table y
     on (x.<something> = y.<something>) join
     table z
     on (y.<something> = z.<something>)
where x.name = 'Test'
group by x.name, x.id;
...