Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с except  [new]
гр к
Guest
Есть таблица с полями account, code.
Как выбрать все аккаунты, для кот-х сущ-т код 100, но нет хотя бы 1-го из кодов (200,300,400,500).
Если б не список, а равенство, я бы так написал
select acc
from
(SELECT 
--*
acc
FROM s
where code=100
EXCEPT 
select
acc
FROM s
where code =300) a

А со списком кроме юниона эксептов пока вар-то в нету((
SQL 2005-й.
19 май 14, 15:46    [16037484]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с except  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
гр к,

NOT IN?
19 май 14, 16:03    [16037637]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с except  [new]
Glory
Member

Откуда:
Сообщений: 104760
гр к
Как выбрать все аккаунты, для кот-х сущ-т код 100, но нет хотя бы 1-го из кодов (200,300,400,500).

тут NOT EXISTS нужен, а не EXCEPT
19 май 14, 16:04    [16037655]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с except  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Glory, да можно и через not exists, и через except

select a.account
from #a a
where code = 100

except 

select a1.account
from #a a1
where a1.code in (200, 300, 400, 500) 
group by a1.account 
having COUNT(distinct a1.code) = 5
19 май 14, 16:14    [16037765]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с except  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Shakill, поправка, count() = 4 для данного набора
19 май 14, 16:15    [16037779]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с except  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shakill
Glory, да можно и через not exists, и через except

Да можно наверное даже CLR функцию написать
19 май 14, 16:18    [16037806]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с except  [new]
гр к
Guest
Shakill
Glory, да можно и через not exists, и через except

select a.account
from #a a
where code = 100

except 

select a1.account
from #a a1
where a1.code in (200, 300, 400, 500) 
group by a1.account 
having COUNT(distinct a1.code) = 4

Спасибо, вроде все получилось.
Glory
Да можно наверное даже CLR функцию написать

CLR нельзя.
Ч-з NOT EXISTS завтра попробую, ч-з него лучше получится?
ЗЫ По идее, мне нужно было кроме собственно аккаунта и код вывести, кот-го нет. Т.е. перечень кодов нужно по идее во временную таблицу засобачивать?
19 май 14, 17:47    [16038600]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с except  [new]
Glory
Member

Откуда:
Сообщений: 104760
select a1.account
from #a a1
where 
group by a1.account 
having SUM(CASE WHEN a1.code=100 THEN 1 ELSE 0 END) > 0 AND  SUM(CASE WHEN a1.code in (200, 300, 400, 500)  THEN 1 ELSE 0 END) = 0 

если сочетания account+code уникальны
19 май 14, 23:38    [16040071]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить