我现在用SQL语句能输出下面形式的格式表1,我想把他的层次更明显如表2所示,该如何处理阿
表1
A         B        C      D
大类A    小类A1    c1     d1
大类A    小类A1    c2     d2
大类A    小类A2    c3     d3
大类B    小类B1    c4     d4
大类B    小类B2    c5     d5
大类B    小类B2    c6     d6表2
A         B        C      D
大类A    小类A1    c1     d1
                   c2     d2
         小类A2    c3     d3
大类B    小类B1    c4     d4
         小类B2    c5     d5
                   c6     d6

解决方案 »

  1.   

    DECLARE @T TABLE(A CHAR(10), B CHAR(10), C CHAR(10), D CHAR(10))
    INSERT INTO @T VALUES('类A', '小类A1', 'c1', 'd1')
    INSERT INTO @T VALUES('类A', '小类A1', 'c2', 'd2')
    INSERT INTO @T VALUES('类A', '小类A2', 'c3', 'd3')
    INSERT INTO @T VALUES('类B', '小类B1', 'c4', 'd4')
    INSERT INTO @T VALUES('类B', '小类B2', 'c5', 'd5')
    INSERT INTO @T VALUES('类B', '小类B2', 'c6', 'd6')DECLARE @a CHAR(10), @b CHAR(10), @c CHAR(10), @d CHAR(10)
    SELECT @a='',@b='',@c='',@d=''SELECT case A when @a then ' ' else A end --这里如何给@a赋值呢?
    from @T用CASE却不知如何给变量赋值,郁闷?
    帮你顶吧!
      

  2.   

    --建表create table test1
    (
    a varchar(100),
    b varchar(100),
    c varchar(100),
    d varchar(100)
    )
    --插入数据
    insert test1(a,b,c,d)
    select '大类A','小类A1','c1','d1'
    union select '大类A','小类A1','c2','d2'
    union select '大类A','小类A2','c3','d3'
    union select '大类B','小类B1','c4','d4'
    union select '大类B','小类B2','c5','d5'
    union select '大类B','小类B2','c6','d6'--查询语句
    select case when id = (select min(id) from 
    (select id=(select count(1) from test1 t1 where  t1.A<=t2.A and t1.B <= t2.B and t1.c <= t2.C),*
    from test1 t2)t4  where A= t3.A ) then a else '' end as a,
           case when id = (select min(id) from (select id=(select count(1) from test1 t1 where  t1.A<=t2.A and t1.B <= t2.B and t1.c <= t2.C),*
    from test1 t2)t5 where A= t3.A and b = t3.b ) then b else '' end as b,
           c,d
    from 
    (
    select id=(select count(1) from test1 t1 where  t1.A<=t2.A and t1.B <= t2.B and t1.c <= t2.C),*
    from test1 t2
    )t3--结果大类A 小类A1 c1 d1
    c2 d2
    小类A2 c3 d3
    大类B 小类B1 c4 d4
    小类B2 c5 d5
    c6 d6
    语句应该还可以优化,我再看看
      

  3.   

    怎么这么麻烦啊,我的表如果有主键ID如下所示,该如何处理啊!ID    A         B        C      D
    ID1  大类A    小类A1    c1     d1
    ID2  大类A    小类A1    c2     d2
    ID3  大类A    小类A2    c3     d3
    ID4  大类B    小类B1    c4     d4
    ID5  大类B    小类B2    c5     d5
    ID6  大类B    小类B2    c6     d6
    谢谢你了coolingpipe(冷箫轻笛)
      

  4.   

    select case when id = (select min(id) from test1 t4 where A= t3.A ) then a else '' end as a,
    case when id = (select min(id) from test1 t1 where A= t3.A and b = t3.b ) then b else '' end as b,
    c,d
    from test1 t3