0

我尝试查找有关我正在尝试编写的查询的一些信息并提出一些想法,但没有足够可靠的方法可以使用。我想我对我需要做什么有一个大致的了解,但我只是错过了那个小小的推动,是吗?

我要做的是编写一个查询,它只获取“类型”仅是一个值的记录,拒绝那些可能有几种我正在寻找的类型但不同的类型会使整个集合无效的记录。

我意识到这有点令人困惑,所以这里有一个例子:

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

假设 LinkType 'A' 的记录是我感兴趣的。如果 LinkId 只有 '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

但后来我被困住了。我想我需要在这里使用HAVING子句,并且怀疑我需要使用 COUNT 或其他东西来(也许?)检查行数,但我似乎无法将这些部分组合在一起。

任何提示,或者关于搜索内容的一些评论?

4

1 回答 1

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 是唯一的方法(在这种情况下也是最清楚的)。

于 2011-09-19T16:17:41.697 回答