我有一个数据库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并将所有元素添加到一行中。其他行不应该出现在输出中。
我以某种方式想到了分组依据,但没有任何结果。
谢谢您的帮助:)
答案 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);