sql获取列值,其中另一列中的所有值都没有值
我有一个包含4列的数据库表: 列A-必须有值并允许重复sql获取列值,其中另一列中的所有值都没有值,sql,sql-server,Sql,Sql Server,我有一个包含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
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
-------------
a2 |
a2 | b3
我想要的是得到A列和B列的值,其中A列中的值,C列中的所有记录都没有值
在本例中,我希望得到以下结果:
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
-------------
a2 |
a2 | b3
对不起,您是指所有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)
你能试试这个吗
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
其中A不为空,C为空,但A列中有相同的值。我希望所有C列都没有值。@juergend我相信,如果你能更清楚地解释一下你想要什么,你会很快得到答案。请你再详细阐述一下你的最后一句话,让我们了解一下实际需求……嗨,我只想要a2值,如果没有a2行具有jarlh的答案中提到的C值,很抱歉描述不清楚。谢谢,你好,贾尔赫,谢谢。是的,你的理解是正确的,但我只有一张桌子。@MapleLi只有一张桌子是正确的used@MapleLi,是的,它在主查询和子选择中都是同一个表。嗨,Giorgi Nakeuri,太棒了!它得到了正确的答案。但是,如何从一个具有数千条记录的现有表中执行相同的操作呢?非常感谢。