2016-06-10 3 views
0

У меня есть 2 стола; T.1- Item_master, который содержит столбцы: upc_ean, description, store_pos_department, item_id. T.2- Alternate_categories, который содержит столбцы: category, item_id.Как вернуть данные из двух критериев в одном столбце при выборе столбцов из нескольких таблиц?

Я пытаюсь создать оператор, который дает мне upc_ean и описание из t.1 и категории из t.2, где upc_ean из t.1 имеет номер категории 11 и любое другое присвоенное ему число из столбца категории в t.2 Мне нужны только результаты, показанные *** строками.

upc_ean   description      category 
013130006989 CRM OF RICE 14Z      7 
016000263444 GM CINN CHEX      7 
016000264182 GM RICE CHEX PP      7 
016000274730 GM CHEX CHOCOLATE     7 
**016000275270 GM HNY NUT CHEERIOS 12.25Z   11** 
**016000275270 GM HNY NUT CHEERIOS 12.25Z   6** 
016000275287 GM CHEERIOS 18Z      11 
016000275317 GM HNY NUT CHEX 13.8Z    7 
016000275584 GM CHEX CORN 14Z     7 
016000275591 GM CHEX RICE 12.08Z     7 
016000275645 GM CHEERIOS 14Z      6 
016000406087 GM CHEX VAN       7 
016000444980 GM CHEX GF GRAN HNYNUT    7 
016000444997 GM CHEX GF GRAN BRYALM    7 
016000486416 CHEX GF OATMEAL ORIG    7 
016000486423 CHEX GF OATMEAL MAPLE BRNW SGR  7 
016000486430 CHEX GF OATMEAL APPLE CINN   7 
**016000487727 GM CHERRIOS       11** 
**016000487727 GM CHERRIOS       6** 
016000487895 GM CHEX CINN      7 
016000487925 GM CHEX HONEY NUT     7 
016000487932 GM CHEX CHOC      7 
016000487949 GM CHEX RICE      7 
016000487963 GM CHEX CORN      7 
016000487987 GM CHEX VANILLA      7 
**030000010402 QUAKER OATS OLD FSHN 42Z   11** 
**030000010402 QUAKER OATS OLD FSHN 42Z   6** 
030000012000 QUAKER OATS OLD FSHN QUICK 42 OZ 6 
**038000016110 KELL SP K 12Z      11** 
**038000016110 KELL SP K 12Z      6** 
038000076480 KELL SP K VAN ALMND     6 
038000102653 KELL SPEC K CHOC ALMND    6 
038000113277 KELL SP K PRO CBS CRNCH    6 
038000113284 KELL SP K GLUTEN FREE    6 

этого заявление, которое я использовал для приведенных выше результатов, я попробовал несколько вариантов и не могу получить желаемые результаты:

select a.upc_ean, a.description, b.category from item_master a 
inner join alternate_categories b 
on a.item_id=b.item_Id 
where b.category in ('1','2','3','4','5','6','7','8','9','10','11','12') 
and store_pos_department=556 
order by a.upc_ean 

Благодаря

+0

Вы должны переформатировать этот вопрос, поэтому он может быть прочитан проще. Это должно включать выборочные данные (в табличном формате) и ожидаемые результаты. Также включите любой код, который вы пробовали, и почему он не работает. – AgRizzo

ответ

0

не проверяли, но это должен быть близок к тому, что вы ищете:

SELECT upc, description, count(*) over(partition by alt) as catcount FROM 
( 
SELECT i.upc, a.description, '1' as alt 
    FROM item_master i 
    JOIN alternate_categories1 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '2' as alt 
    FROM item_master i 
    JOIN alternate_categories2 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '3' as alt 
    FROM item_master i 
    JOIN alternate_categories3 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '4' as alt 
    FROM item_master i 
    JOIN alternate_categories4 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '5' as alt 
    FROM item_master i 
    JOIN alternate_categories5 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '6' as alt 
    FROM item_master i 
    JOIN alternate_categories6 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '7' as alt 
    FROM item_master i 
    JOIN alternate_categories7 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '8' as alt 
    FROM item_master i 
    JOIN alternate_categories8 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '9' as alt 
    FROM item_master i 
    JOIN alternate_categories9 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '10' as alt 
    FROM item_master i 
    JOIN alternate_categories10 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '11' as alt 
    FROM item_master i 
    JOIN alternate_categories11 a 
    ON i.upc = a.upc 
    UNION 
    SELECT i.upc, a.description, '12' as alt 
    FROM item_master i 
    JOIN alternate_categories12 a 
    ON i.upc = a.upc 
) 
WHERE catcount > 1 
and EXISTS(
    SELECT * from 
    FROM item_master i 
    JOIN alternate_categories11 a 
    ON i.upc = a.upc 
) 
0

Вы можете использовать внутреннее соединение на item_master

select upc from item_master a, 
inner join item_master b on a.upc = b.upc 
where a.alternate_category = '11' 
and b. a.alternate_category !='11 
0

Вы должны иметь возможность использовать группу только с условием на ней. Для конкретных данных, которые вы показали, вы хотели бы, чтобы 1234 upc правильно?

Таким образом, вы можете сделать следующее:

DECLARE @Table AS TABLE (UPC INT, AlternateCategory INT) 
INSERT INTO @Table (UPC, AlternateCategory) 
    VALUES (1234,5),(1234,11),(2345,5),(2456,11) 


SELECT Upc 
FROM 
    @Table 
GROUP BY 
    UPC 
HAVING 
    SUM(IIF(AlternateCategory = 11,1,0)) > 0 
    AND SUM(IIF(AlternateCategory <> 11,1,0)) > 0 
Смежные вопросы