SQL合并行(假设尽可能短)

时间:2019-06-15 14:34:05

标签: sql row aggregation

我有一个数据库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并将所有元素添加到一行中。其他行不应该出现在输出中。

我以某种方式想到了分组依据,但没有任何结果。

谢谢您的帮助:)

3 个答案:

答案 0 :(得分:1)

这就是您想要的:

select tx.a, tx.b, ty.c, ty.d
from t tx join
     t ty
     on tx.a = 'X' and ty.a = 'Y'

答案 1 :(得分:0)

种类

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;

答案 2 :(得分:0)

使用自我加入:

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);