显示组以上详细信息查询

时间:2009-04-22 05:33:42

标签: sql-server

表格中的数据:

    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 :(得分:0)

所有软饮料都在itemgroup sfd中。试试select itemcode, itemname from table where itemgroup = 'SFD';

Mark Hamilton指出:

  

除了Softdrink本身没有SFD作为其ItemGroup。您需要在查询中添加“或ItemCode ='SFD'”。我想知道这些类别是否可以进一步嵌套,在这种情况下,递归CTE可以解决这个问题

是的,要么在地方添加'或',要么递归。

答案 1 :(得分:0)

使用

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')

可以进一步修改。

答案 2 :(得分:0)

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 OrangeItemGroup = FNT添加{{1}},此查询也会选择它们。