2011-09-19 51 views
0

我试过寻找一些关于查询的信息,我试图编写并提出一些想法,但没有足够的可用性来处理。我想我对我需要做什么有一个总体的想法,但我只是错过了那个小小的推动,是吗?SQL查询返回仅限一种类型的记录

我想要做的是写一个查询,只得到其'类型'只有一个值的记录,拒绝那些可能有几个我正在寻找的类型,但一个不同的无效整个集合。

我意识到有点混乱,所以这里有一个例子:

LinkId LinkType 
1234 A 
1234 B 
1235 A 
1236 A 
1236 A 

假设链接类型“A”的记录是什么,我很感兴趣,如果一个链路ID只有“A”的记录,我。想要它。如果它有一些(1或很多,这没什么关系)A记录和一些其他值的记录,不要管它。例如,在上面的示例表中,ID 1234已用完,但1235和1236有效。

现在我知道我可以这样做

SELECT LinkId, LinkType 
FROM dbo.ExampleTable 
GROUP BY LinkId, LinkType 

折叠表成类似

LinkId LinkType 
1234 A 
1234 B 
1235 A 
1236 A 

但后来我坚持。我想我需要在这里使用一个子句,并且怀疑我需要使用COUNT或其他东西(可能?)检查行数,但我似乎无法将这些部分放在一起。

任何提示,或者可能是关于搜索什么的一些意见?

回答

2

T-SQL

SELECT * 
FROM ExampleTable 
WHERE LinkID NOT IN 
(
    SELECT LinkID 
    FROM ExampleTable 
    WHERE LinKType != 'A' 
) 

应该做你想要什么。 因此,抓住不属于A型的LinkID列表,然后抓取不属于先前选择的LinkID列表(因此只显示As)

您无法执行Group By,因为当通过LinkID进行分组时,您将失去有关LinkType的信息,因此SubQuery是唯一的方法(并且在这种情况下最明确)。

+0

该死的,你做的比我想象的要容易。非常感谢! – benjamin

+0

没问题。很高兴帮助:) –