繁体   English   中英

sql获取列值,而另一列中的所有值都没有值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM