Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом.  [new]
MagadanMagadan
Member

Откуда:
Сообщений: 21
Добрый день,
Есть поставленная задача и я хотел бы по возможности попросить помощь у знающих людей.
Попробую обяснить:
Как можно написать SELECT чтоб получить ответ только если он полный.
К примеру есть таблица USERS в каторгой PK UserID , в запросе есть WHERE UserID IN (1,2,3,4) (where динамический и меняется в аппликации) , теперь самое интересное нужно вернуть ответ только если в
ответе есть полностью весь WHERE , если есть (1,2,3,4) то вернуть ответ при условии что в нем есть и 1 и 2 и 3 и 4 и не возвращать ответ если хоть одного нет.

Надеюсь понятно объяснил.
Заранее спасибо за помощь.

P.S. SQL SERVER 2005
8 дек 09, 11:41    [8033423]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
-- test data
declare @USERS table(UserID int)
insert into @USERS(UserID)
select 1 union all
select 2 union all
--select 3 union all
select 4
-- end of test data

;with cte as (
   select UserID, count(*) over() as cnt
     from @USERS
    where UserID IN (1,2,3,4)
)
select UserID
  from cte
 where cnt = 4
?

при упоминании каторги волосы встали дыбом
8 дек 09, 11:49    [8033484]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Если преобразовать список значений в результат SELECTа, то
/*Исходные данные: Паганель ®*/
-- test data
declare @USERS table(UserID int)
insert into @USERS(UserID)
select 1 union all
select 2 union all
--select 3 union all
select 4
-- end of test data

;WITH CTE(V) AS(SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4)
SELECT * FROM @USERS U WHERE U.UserID IN (SELECT V FROM CTE)
AND NOT EXISTS(SELECT V FROM CTE EXCEPT SELECT UserID FROM @USERS);
8 дек 09, 12:15    [8033726]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Glamorama
Member

Откуда:
Сообщений: 152
Как вариант
SELECT *
FROM <ваша табличка>
WHERE 
	UserId IN (<спиок ID юзеров>) AND
	(SELECT COUNT(DISTINCT UserId) FROM <ваша табличка> WHERE UserId IN (<спиок ID юзеров>))=<кол-во уникальных ID юзеров в списке>
8 дек 09, 12:28    [8033846]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
А зачем distinct?
Это ж первичный ключ...
8 дек 09, 12:33    [8033885]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
MagadanMagadan
Member

Откуда:
Сообщений: 21
Огромное спасибо всем за помощь.
Буду пробовать.
8 дек 09, 13:00    [8034172]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить