假设我有一个包含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查询执行此操作?
答案 0 :(得分:6)
如果我理解正确,您可以使用group by
和having
:
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);