SQL-запрос для возврата записей, которые имеют только один тип - PullRequest
0 голосов
/ 19 сентября 2011

Я попытался найти некоторую информацию о запросе, который я пытаюсь написать, и выдвинул некоторые идеи, но ничего достаточно надежного для работы.Я думаю, что у меня есть общее представление о том, что мне нужно сделать, но мне просто не хватает этого небольшого толчка, да?

Что я пытаюсь сделать, это написать запрос, который получает только записи, чей «тип»является исключительно одним значением, отклоняя те, где может быть несколько типов, которые я ищу, но одно другое делает недействительным весь набор.

Я понимаю, что это немного сбивает с толку, так что вот пример:

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

Скажем, записи LinkType 'A' - это то, что меня интересует. Если LinkId имеет только записи A, я хочу этого.Если он имеет несколько (1 или много, это не имеет значения) записей A и запись некоторого другого значения, оставьте это в покое.Например, в приведенной выше таблице идентификаторов 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 или что-то еще, чтобы (возможно?) Проверить количество строк, но я просто не могу принести кусочкивместе.

Любые советы или, может быть, некоторые комментарии о том, что искать?

1 Ответ

2 голосов
/ 19 сентября 2011

T-SQL

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

Должен делать то, что вы хотите.Итак, возьмите список LinkID, которые не относятся к типу A, затем возьмите список LinkID, которых нет в этом предыдущем выборе (поэтому будет отображаться только As)

Вы не можете выполнить Группировку по, потому чтовы потеряете информацию о LinkType при группировке по LinkID, так что SubQuery - единственный способ (и самый понятный в этой ситуации).

...