2013-07-14 3 views
2

У меня есть две таблицы с именем «Item» (с столбцами ItemId и Title) и «ItemSpecificationValue» (с столбцами ItemId, ItemSpecificationValueId).SQL Server - выбор строк со значениями в двух разных диапазонах для одного и того же столбца

(Item Table) 
ItemId | Title       
    1  | abcd   
    2  | pqrs   
    3  | uvwx        

(ItemSpecificationValue Table) 
ItemId | ItemSpecificationValueId 
    1  | 11 
    2  | 50 
    2  | 55 
    2  | 115 
    3  | 11 
    3  | 163 

Скажем, я нужен, чтобы извлечь все строки из «Item» таблицы, которая имеет, по меньшей мере, один из ItemSpecificationValueId рангея: {50,55} и, по меньшей мере, один из rangeB: {11,115,163}. Таким образом, вы видите, что единственным предметом, который удовлетворяет вышеуказанному требованию, является тот, у которого есть ItemId 2.

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

SELECT Item.ItemId, Item.Title 
FROM Item 
    RIGHT JOIN ItemSpecificationValue 
     ON ItemSpecificationValue.ItemId = Item.ItemId 
WHERE ItemSpecificationValue.ItemSpecificationValueId in ('50','55') 
INTERSECT 
SELECT Item.ItemId, Item.Title 
FROM Item 
    RIGHT JOIN ItemSpecificationValue 
     ON ItemSpecificationValue.ItemId = Item.ItemId 
WHERE ItemSpecificationValue.ItemSpecificationValueId in ('11','115','163') 

ответ

2

Это должно работать, используя COUNT с CASE:

select I.ItemId, I.Title 
from Item I 
    inner join ItemSpecificationValue ISV 
    on I.ItemId = ISV.ItemId 
group by I.ItemId, I.Title 
having count(case when ItemSpecificationValueId IN (50,55) then 1 end) > 0 
    and count(case when ItemSpecificationValueId IN (11,115,163) then 1 end) > 0 
+0

Awesome! Спасибо, sgeddes !! –

+0

@ChamzDes - np, рад, что я мог бы помочь! – sgeddes

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