Комбинирование строк в SQL с максимально короткими предположениями - PullRequest
0 голосов
/ 15 июня 2019

У меня есть база данных SQL со столбцами A, B, C и D. Для каждой строки встречаются 4 случая:

>     A  B  C  D     

>     X  Y  -  -
>     Y  -  Z  W
>     R  -  T  -
>     S  -  -  P

Я хочу, чтобы вывод был:

>     A  B  C  D    

>     X  Y  Z  W

Таким образом, всякий раз, когда существует X к Y и Y имеет элемент в C или D (или в обоих), тогда оставьте y и добавьте все элементы в одну строку.иначе строки не должны быть в выводе.

как-то я думал о Group By, но ничего не получается.

Спасибо за помощь:)

Ответы [ 3 ]

1 голос
/ 15 июня 2019

Это делает то, что вы хотите:

select tx.a, tx.b, ty.c, ty.d
from t tx join
     t ty
     on tx.a = 'X' and ty.a = 'Y'
0 голосов
/ 15 июня 2019

С самостоятельным присоединением:

SELECT t.A, t.B, tt.C, tt.D
FROM tablename t INNER JOIN tablename tt 
ON tt.A = t.B AND COALESCE(tt.C, tt.D) IS NOT NULL;

Без COALESCE():

SELECT t.A, t.B, tt.C, tt.D
FROM tablename t INNER JOIN tablename tt 
ON tt.A = t.B AND (tt.C IS NOT NULL OR tt.D IS NOT NULL);
0 голосов
/ 15 июня 2019

Вид

create table t (
    A varchar(2) not null,
    B varchar(2),
    C varchar(2),
    D varchar(2)
); 

insert t(A,B,C,D)
values
     ('X','Y',null,null)
    ,('Y',null,'Z','W')
    ,('R',null,'T',null)
    ,('S',null,null,'P');

select t1.A, t1.B, t2.C, t2.D
from t t1
join t t2 on t1.B = t2.A 
         and coalesce (t2.C, t2.D) is not null;
...