2015-08-06 4 views
0

Я Tring для фильтрации продуктов с обоими Id 17 со значением 97 и Id 6 со значением 11.MS SQL 2008 - одна таблица, множественный фильтр

Вот SQL Fiddle для этого.

В этом примере мне нужно вернуть строку, где fkProductId = 24011.

Вы можете мне помочь?

CREATE TABLE AttributeBindings(
    fkProductId int, 
    fkAttributeId int, 
    fkAttributeValueId int 
) 

INSERT INTO AttributeBindings (fkProductId, fkAttributeId ,fkAttributeValueId) 
           VALUES (24011, 17, 97) 
INSERT INTO AttributeBindings (fkProductId, fkAttributeId ,fkAttributeValueId) 
           VALUES (24012, 17, 97) 
INSERT INTO AttributeBindings (fkProductId, fkAttributeId ,fkAttributeValueId) 
           VALUES (24011, 6, 11) 

ответ

0

Вы самостоятельно можете присоединиться к таблице на ID продукта:

Select p1.fkProductId From AttributeBindings p1 
    inner join AttributeBindings p2 on p1.fkProductId = p2.fkProductId 
where 
    (p1.fkAttributeId = 17 and p1.fkAttributeValueId = 97) 
    and (p2.fkAttributeId = 6 and p2.fkAttributeValueId = 11) 
+0

Спасибо, это сработало. –

0
SELECT fkproductid FROM AttributeBindings 
WHERE fkAttributeId = 17 AND fkAttributeValueId = 97 
intersect 
SELECT fkproductid FROM AttributeBindings 
WHERE fkAttributeId = 6 AND fkAttributeValueId = 11 

Вы можете использовать INTERSECT, чтобы получить результат.

+0

Привет, если вы измените "fkproductid" на "fkProductId" , это будет работать. Но ваш вопрос выполняется дважды из-за кварца Жюльена. Благодарю. –

0

Что-то, как это должно работать:

;WITH q1 
AS (
    SELECT * 
    FROM attributeBindings a 
    WHERE a.fkAttributeId = 17 
     AND a.fkAttributeValueId = 97 
    ) 
    ,q2 
AS (
    SELECT * 
    FROM attributeBindings a 
    WHERE a.fkAttributeId = 6 
     AND a.fkAttributeValueId = 11 
    ) 
SELECT q1.fkProductId 
FROM q1 
INNER JOIN q2 ON q1.fkProductId = q2.fkProductId 

SQL Fiddle Demo

+0

его немного длиннее но я работал спасибо. –

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