[英]SQL Query to get column values that correspond with MAX value of another column?
[英]sql get column value which all values in another column no value
我有一个数据库表,其中包含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
抱歉,您的意思是所有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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.