我有一个包含4列的数据库表:
列A - 必须具有值并允许重复
B栏 - 可能是空的
C栏 - 可能是空的
D栏 - 必须具有唯一值
示例:
A | B | C | D
---|-----|------|-------
a1 | b1 | - | 101
a1 | - | c1 | 102
a1 | b2 | - | 103
a2 | - | - | 104
a2 | b3 | - | 105
a3 | b4 | c2 | 106
a3 | - | c3 | 107
a3 | - | c4 | 108
我想要的是获取A列和B列值,其中对于A列中的值,C列中的所有记录都没有值。
在示例中,我想获得以下结果:
A | B
-------------
a2 |
a2 | b3
答案 0 :(得分:3)
抱歉,您的意思是所有a2值,因为没有a2行有C值?
select a, b
from tablename t1
where not exists (select 1 from tablename t2
where t1.a = t2.a
and c is not null)
答案 1 :(得分:0)
你能试试吗?
DECLARE @t TABLE
(
A CHAR(2) ,
B CHAR(2) ,
C CHAR(2) ,
D INT
)
INSERT INTO @t
VALUES ( 'a1', 'b1', NULL, 101 ),
( 'a1', NULL, 'c1', 102 ),
( 'a1', 'b2', NULL, 103 ),
( 'a2', NULL, NULL, 104 ),
( 'a2', 'b3', NULL, 105 ),
( 'a3', 'b4', 'c2', 106 ),
( 'a3', NULL, 'c3', 107 ),
( 'a3', NULL, 'c4', 108 );
WITH cte
AS ( SELECT t1.* ,
RANK() OVER ( PARTITION BY t1.A ORDER BY t1.C ) AS R
FROM @t t1
JOIN @t t2 ON t2.A = t1.A
)
SELECT t.A ,
t.B
FROM cte
JOIN @t t ON t.A = cte.A
GROUP BY t.A ,
t.B
HAVING COUNT(DISTINCT ( R )) = 1
输出:
A B
a2 NULL
a2 b3