Показать группу выше деталей Запрос - PullRequest
0 голосов
/ 22 апреля 2009

Данные в таблице:

    ItemCode  ItemName     ItemGroup  
    SFD       Softdrink     NULL
    CCL       Coco Cola     SFD
    FNT       Fanta         SFD
    SPR       Sprite        SFD
    ACL       Alchol            
    TQL       Tequila       ACL
    VDK       Vodka         ACL

Когда пользователь найдет «Softdrink», результат будет:

    ItemCode       ItemName
    SFD            Softdrink     
    CCL            Coca Cola         
    FNT            Fanta                       
    SPR            Sprite               

Как я мог это сделать?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 22 апреля 2009

Получил Работал с

select ItemCode, ItemName from Items 
where itemCode in (select itemcode  from Items where itemname = 'softDrink') 
or itemGroup in  (select itemcode  from Items where itemname = 'softDrink')

Может ли это быть изменено дальше.

0 голосов
/ 22 апреля 2009
WITH hier (code, name) AS
        (
        SELECT  ItemCode, ItemName
        FROM    Table
        WHERE   ItemCode = 'SFD'
        UNION ALL
        SELECT  ItemCode, ItemName
        FROM    hier
        JOIN    Table
        ON      ItemGroup = code
        )
SELECT  *
FROM    hier

Это позволит выбирать элементы даже с более глубоким уровнем иерархии (т.е. вы можете добавить Fanta Lemon и Fanta Orange с ItemGroup = FNT, и этот запрос также выберет их).

0 голосов
/ 22 апреля 2009

Все безалкогольные напитки находятся в группе товаров sfd. Попробуйте select itemcode, itemname from table where itemgroup = 'SFD';

Марк Гамильтон указывает:

За исключением того, что сам Softdrink не имеет SFD в качестве своей ItemGroup. Вам нужно добавить "или ItemCode = 'SFD'" к вашему запросу. Интересно, могут ли категории вкладываться дальше, и в этом случае рекурсивный CTE сделает свое дело

Да, либо добавьте 'или' к where, либо используйте рекурсив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...