2015-07-08 6 views
1

У меня есть таблица, содержащую такие данные, как:Sql Соответствующий точные DataSets на тот же таблице

Store,Product 
a,   1 
a,   2 
b,   3 
b,   2 
c,   3 
c,   1 
d,   1 
d,   2 
d,   3 

Я пытаюсь написать запрос, который дает мне сменный магазин, поэтому, так как магазин d продает весь продукт, магазин продает, он может быть заменой для магазина, но магазин не может быть заменой для магазина d, так как у него нет всего магазина товаров d.

Так что запрос возвратит следующую таблицу:

Store,Store Replacement 
a,-   
b,-  
c,- 
d,a 

* Примечание я не мог понять, как сделать таблицу, так «» представляет собой разделение столбцов. - равно пробел в пространстве

ответ

0

Вот версия, которая делает работу:

select sp.store, sp2.store 
from (select sp.*, count(*) over (partition by store) as numproducts 
     from @storeproduct sp 
    ) sp join 
    @storeproduct sp2 
    on sp.product = sp2.product and sp.store <> sp2.store 
group by sp.store, sp2.store, numproducts 
having count(sp2.product) = numproducts; 

Here является SQL Скрипки.

+0

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

+0

@Chadbur. , , Я не понимаю вопроса. 'Count (*)' не смотрит на столбцы, поэтому все равно, каковы типы столбцов. –

+0

Вы должны извинить меня, я не понимал, что делал счет (*) и как он использовался, но он работал, больно потратить когда-то понимание того, как именно он работает. – Chadbur

 Смежные вопросы

  • Нет связанных вопросов^_^