SQL - 根据B列中的值从A列中选择

时间:2015-09-30 22:32:31

标签: sql tsql

假设我有一个包含2列( a b )的表格,其中包含以下值:

 a     b
---   ---
 1     5
 1    NULL 
 2    NULL
 2    NULL
 3    NULL

我想要的输出:

 a
---
 2
 3

我想只从列 a 中选择那些不同的值,在 b 列中,此值的每次出现都为NULL。因此,从我想要的输出中,“1”将不会进入因为 b 列中有“5”,即使第二次出现 a NULL 1" 。

如何使用TSQL查询执行此操作?

6 个答案:

答案 0 :(得分:6)

如果我理解正确,您可以使用group byhaving

执行此操作
select a
from t
group by a
having count(b) = 0;

count()与列名一起使用时,它会计算非NULL值的数量。因此,如果所有值都是NULL,那么该值将为零。

答案 1 :(得分:2)

这很简单:

SELECT A
FROM table1
GROUP BY A
HAVING COUNT(B) = 0

按A分组会导致A值相同的所有行都转移到输出中的单个行中。添加HAVING子句可以使用聚合函数过滤这些分组的行。 COUNT不计算NULL个值,因此当它为0时,B中没有其他值。

答案 2 :(得分:2)

另外两种方法:

SELECT a
FROM t

EXCEPT

SELECT a
FROM t
WHERE b IS NOT NULL ;

这将使用(a, b)上的索引:

SELECT a
FROM t
GROUP BY a
WHERE MIN(b) IS NOT NULL ;

答案 3 :(得分:1)

试试这样:

$auth.SubmitRegistration()

答案 4 :(得分:0)

要对您的问题进行回答,您需要列a中的值b中该值没有非空值。

select distinct a
from table1 as t1
where 0 = (select count(*) 
           from table1 as t2
           where t1.a = t2.a
           and b is not null)

示例小提琴在这里:http://sqlfiddle.com/#!6/5d1b8/1

答案 5 :(得分:0)

这应该这样做:

SELECT DISTINCT a
FROM t
WHERE b IS NULL
AND a NOT IN (SELECT a FROM t WHERE b IS NOT NULL);