SELECT     BigClassID,Name
FROM       Sp_ClassBig
where      Sp_ClassBig.UpGradeID=0SELECT     BigClassID,Name
FROM       Sp_ClassBig
where      Sp_ClassBig.UpGradeID>0这两个查询怎么建立关系查询?怎么让两个查询有主从关系?

解决方案 »

  1.   

    DECLARE @t TABLE
    (
    BigClassID int,
    Name varchar(10),
    UpGradeID int
    );INSERT INTO @t  
    SELECT 1,'食品干货', 0 UNION ALL
    SELECT 2,'日用', 0 UNION ALL
    SELECT 3,'休闲食品', 1 UNION ALL
    SELECT 4,'饮料', 1 UNION ALL
    SELECT 5,'烟', 1 UNION ALL
    SELECT 6,'酒水', 1 UNION ALL
    SELECT 7,'健康美容', 2 UNION ALL
    SELECT 8,'纸制用品', 2 UNION ALL
    SELECT 9,'饼干', 1 UNION ALL
    SELECT 10,'清洁用品', 2 
    --准备数据;WITH c_distinct AS
    (
    SELECT *
    FROM @t
    WHERE UpGradeID = 0
    )
    SELECT ParentName = a.Name, 
    ChildName = t2.Name
    FROM
    (
    SELECT *
    FROM c_distinct) a
    CROSS APPLY
    (
    SELECT t.Name
    FROM @t t
    WHERE t.UpGradeID = a.BigClassID) t2
    测试结果:
    ParentName ChildName
    ---------- ----------
    食品干货     休闲食品
    食品干货     饮料
    食品干货     烟
    食品干货     酒水
    食品干货     饼干
    日用         健康美容
    日用         纸制用品
    日用         清洁用品(8 row(s) affected)你是否想要递归查询,类似这样?
      

  2.   

    哦,建个中间表~~厉害~
    有简便一点的吗?像INNER JOIN那样就带有关系
      

  3.   


    对了,如果用户要增加类,那INSERT INTO @t  这个不是要改了吗?
    INSERT INTO @t 
    select *       这样行吗?
      

  4.   


    我这里写的@t是模拟你第一张帖子出贴出来的数据表中的数据,你可以直接用数据库中的真实表名替换到@t的位置,
    ;WITH c_distinct AS
    (    SELECT *    FROM @t    WHERE UpGradeID = 0)
    SELECT ParentName = a.Name,         ChildName = t2.Name
    FROM(    SELECT *    FROM c_distinct) a
    CROSS APPLY(    SELECT t.Name    FROM @t t    WHERE t.UpGradeID = a.BigClassID) t2把这段中@t变量换成你的表名应该就是了
      

  5.   

    select a.name,b.name from (select bigclassid,name from test where upgradeid=0) a inner join (select * from test where upgradeid>0) b on a.bigclassid =b.upgradeid order by b.upgradeid
    把test换成你要的表名即可