SQL“全部”功能?

时间:2010-10-08 21:35:00

标签: sql sql-server-2005 tsql

这可能是一个非常简单的问题,谷歌就像“全部”这样的词语很难。

SELECT a.Id, Max(b.Number)
FROM Table1 a
JOIN Table2 b
    ON a.FK = b.Id
GROUP BY a.Id

但我想添加一个where子句,指定链接到a.FK的所有b.Id必须具有值。所以基本上我不想选择b.Id的a.Id分组,其中任何一个b.Id都是null。希望我说清楚,如果我需要详细说明,请告诉我。感谢。

编辑 - 有一些说明(也改变了上面的查询):

Table1
Id, FK
1   1
1   2
2   3
3   4
3   5
3   6

Table 2
Id   Number
1    1
2    NULL
3    10
4    20
5    30
6    40

我希望我的查询显示:

a.Id   Max Number
2      10
3      40

(注意a.Id = 1没有显示,因为其中一个b.Number字段为空)

3 个答案:

答案 0 :(得分:1)

好的,你问的是我认为你的问题完全不同的问题。我正在取代我的答案。

我处理这个的方法是连接a到b两次 - 一次获取b中的所有匹配行,第二次连接搜索b中的行,其中Number为null。如果不存在这样的行,那么我们知道它们都是非空的。

SELECT a.Id, Max(b1.Number)
FROM Table1 a
JOIN Table2 b1 ON a.FK = b1.Id
LEFT OUTER JOIN Table2 b2 ON a.FK = b2.Id AND b2.Number IS NULL
WHERE b2.Id IS NULL
GROUP BY a.Id

b2.Id仅在找不到b2.Number为空的行时才为空。

答案 1 :(得分:1)

select t1.Id, max(Number) as [Max Number]
from Table1 t1
left join Table2 t2 ON t1.FK=t2.Id and t2.Number is not null
group by t1.Id
having count(distinct t1.FK) = count(distinct t2.Id)

答案 2 :(得分:0)

选择a.Id,Max(b.Id)
从表1中a 加入表2 b
    在a.FK = b.Id
    在哪里b.Id不是NULL
GROUP BY a.Id