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

Откуда:
Сообщений: 2
Условие.
Есть две таблицы следующего плана. Первая содержит ID неких предметов и их описание.

Вторая таблица содержит ID неких пользователей и ID доступных для пользователей

предметов из первой таблицы.

Таблица 1:
Item_IDItem_Name
1pen
2pencil
3marker



Таблица 2:
User_IDItem_ID
11
13
21
22
33


Задача.
Вывести запросом таблицу, показывающую всех пользователей из Таблицы 2 и какие предметы

каждый пользователей имеет, а какие нет.

Результат:
User_IDItem_IDIs_Have
11have
12not have
13have
21have
22have
23not have
31not have
32not have
33have


+ Версия сервера
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4033.0 (Intel X86) Jul 9 2014 16:08:15 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
17 май 15, 14:29    [17651366]     Ответить | Цитировать Сообщить модератору
 Re: показать что есть и чего нет  [new]
Кролик-зануда
Guest
molser,

with [таблица1] as
(select *from(values(1,'pen'),(2,'pencil'),(3,'marker'))a(Item_ID,Item_Name))
,[таблица2] as
(select*from(values(1,1),(1,3),(2,1),(2,2),(3,3))b(User_ID,Item_ID))
,users as
(select distinct user_id from [таблица2])
select u.User_ID,t1.Item_ID,case when t2.Item_ID is null then 'not ' else '' end+'have' 
  from users u
 cross join [таблица1] t1
  left join [таблица2] t2
    on t2.Item_ID=t1.Item_ID
   and t2.User_ID = u.User_ID


вместо Users желательно использовать соответствующую сущность, ибо могут быть юзеры без итемов
17 май 15, 18:06    [17651871]     Ответить | Цитировать Сообщить модератору
 Re: показать что есть и чего нет  [new]
molser
Member

Откуда:
Сообщений: 2
Кролик-зануда,
Спасибо!! Теперь буду разбираться как это работает)
17 май 15, 18:26    [17651912]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить