表A(类别,编号,名称)
A  001 电视
A  002 电脑
A  003 手机
A  004 平板
A  005 其他
B  001 电器
B  002 电子
B  003 充电
B  004 其他
C  001 家用
C  002 其他
D  001 其他
我想输入结果为:按照类别取最大行数输出,其他不够行的以空行补充:
A  001 电视
A  002 电脑
A  003 手机
A  004 平板
A  005 其他
B  001 电器
B  002 电子
B  003 充电
B  004 其他
B  
C  001 家用
C  002 其他
C
C
C
D 001 其他
D
D
D
输出行数

解决方案 »

  1.   

    select a.类别,b.编号,b.名称 from 
    (select a.类别,b.编号 from (select distinct 类别 from tbA)a,(select distinct 编号 from tbA)b)a
    left join tbA b on a.类别=b.类别 and a.编号=b.编号
      

  2.   

     
     create table tb(col1 char(1),no char(3),name nchar(2))
     insert into tb
      select 'A','001',N'电视' union all
      select 'A','002',N'电脑' union all
      select 'A','003',N'手机' union all
      select 'A','004',N'平板' union all
      select 'A','005',N'其他' union all
      select 'B','001',N'电器' union all
      select 'B','002',N'电子' union all
      select 'B','003',N'充电' union all
      select 'B','004',N'其他' union all
      select 'C','001',N'家用' union all
      select 'C','002',N'其他' union all
      select 'D','001',N'其他' 
      
      select isnull(a.col1,b.col1) col1,a.no,a.name
      from tb a right join(select * from (select distinct no from tb) m,(select distinct col1 from tb) n) b
       on a.no=b.no and a.col1=b.col1
       
    /*
    col1 no   name
    ---- ---- ----
    A    001  电视
    A    002  电脑
    A    003  手机
    A    004  平板
    A    005  其他
    B    001  电器
    B    002  电子
    B    003  充电
    B    004  其他
    B    NULL NULL
    C    001  家用
    C    002  其他
    C    NULL NULL
    C    NULL NULL
    C    NULL NULL
    D    001  其他
    D    NULL NULL
    D    NULL NULL
    D    NULL NULL
    D    NULL NULL(20 row(s) affected)   
      

  3.   

    declare @ct int
    select @ct=max(ct) from(select ct=count(1) from tb group by col1)t
    ;with cte as(
    select * from tb union all
    select col1,null,null from tb,master..spt_values where type='p' and number between 1 and @ct
    )
    select col1,[no],[name] from (select *,row=row_number()over(partition by col1 order by col1,[no] desc,[name] desc) from cte)t where row<=@ct
      

  4.   

    高手啊。真厉害!如果我想让输入固定的行数呢,比如:每个类别都是10行,变成这样:
    A    001  电视
    A    002  电脑
    A    003  手机
    A    004  平板
    A    005  其他
    A    null null
    A    null null
    A    null null
    B    001  电器
    B    002  电子
    B    003  充电
    B    004  其他
    B    NULL NULL
    B    NULL NULL
    C    001  家用
    C    002  其他
    C    NULL NULL
    C    NULL NULL
    C    NULL NULL
    D    001  其他
    D    NULL NULL
    D    NULL NULL
    D    NULL NULL
    D    NULL NULL
      

  5.   

    高手啊。真厉害!如果我想让输入固定的行数呢,比如:每个类别都是8行,变成这样:
    A    001  电视
    A    002  电脑
    A    003  手机
    A    004  平板
    A    005  其他
    A    null null
    A    null null
    A    null null
    B    001  电器
    B    002  电子
    B    003  充电
    B    004  其他
    B    NULL NULL
    B    NULL NULL
    B    NULL NULLB    NULL NULL