编号    名称1    名称2 
1001    水        水 
1001    水        矿泉水 
1002    烟        烟 
1002    烟        白沙烟 
1002    烟        云烟 
1003    酒        酒 
1003    酒        茅台 想要结果如下
编号    名称1    名称2 
1001    水        水 
         水        矿泉水 
1002    烟        烟 
         烟        白沙烟 
         烟        云烟 
1003    酒        酒 
         酒        茅台 

解决方案 »

  1.   

    use tempdb
    go
    --> --> 
     
    if not object_id('Tempdb..#') is null
    drop table #
    Go
    Create table #([编号] int,[名称1] nvarchar(1),[名称2] nvarchar(3))
    Insert #
    select 1001,N'水',N'水' union all
    select 1001,N'水',N'矿泉水' union all
    select 1002,N'烟',N'烟' union all
    select 1002,N'烟',N'白沙烟' union all
    select 1002,N'烟',N'云烟' union all
    select 1003,N'酒',N'酒' union all
    select 1003,N'酒',N'茅台'
    Go
    Select 
    [编号]=case when [名称2]=(select top 1 [名称2] from # where [编号]=a.[编号]) then rtrim([编号]) else '' end,[名称1],[名称2]
    from # a(7 個資料列受到影響)
    编号           名称1  名称2
    ------------ ---- ----
    1001         水    水
                 水    矿泉水
    1002         烟    烟
                 烟    白沙烟
                 烟    云烟
    1003         酒    酒
                 酒    茅台(7 個資料列受到影響)
      

  2.   


    select isnull(b.编号,''),a.名称1,a.名称2 from tb a left join (select * from tb where 名称1=名称2) b on a.编号=b.编号
      

  3.   

    Go
    Select 
    [编号]=case when [名称2]=[名称1] then rtrim([编号]) else '' end,[名称1],[名称2]
    from # a
      

  4.   

    select * from (
    select 编号=(case when c.名称2=(select min(名称2) from tb where 编号=c.编号 and 名称1=c.名称1) then a.编号 else '' end) ,
           名称1,
           名称2 
    from tb c ) order by 名称1,名称2 
      

  5.   

    create table tb(编号 varchar(10),    名称1 varchar(10) ,  名称2 varchar(10))
    insert into tb values(1001 ,   '水' ,       '水') 
    insert into tb values(1001 ,   '水' ,       '矿泉水') 
    insert into tb values(1002 ,   '烟' ,       '烟') 
    insert into tb values(1002 ,   '烟' ,       '白沙烟') 
    insert into tb values(1002 ,   '烟' ,       '云烟') 
    insert into tb values(1003 ,   '酒' ,       '酒') 
    insert into tb values(1003 ,   '酒' ,       '茅台') 
    goselect 编号, 名称1 , 名称2 from
    (
    select * , 编号 px from tb where 名称1 = 名称2
    union all
    select 编号 = '' , 名称1 , 名称2 , 编号 px from tb where 名称1 <> 名称2
    ) t
    order by px , len(名称2)drop table tb/*
    编号         名称1        名称2        
    ---------- ---------- ---------- 
    1001       水          水
               水          矿泉水
    1002       烟          烟
               烟          云烟
               烟          白沙烟
    1003       酒          酒
               酒          茅台(所影响的行数为 7 行)
    */
      

  6.   

    create table tb(编号 varchar(10),    名称1 varchar(10) ,  名称2 varchar(10))
    insert into tb values(1001 ,   '水' ,       '水') 
    insert into tb values(1001 ,   '水' ,       '矿泉水') 
    insert into tb values(1002 ,   '烟' ,       '烟') 
    insert into tb values(1002 ,   '烟' ,       '白沙烟') 
    insert into tb values(1002 ,   '烟' ,       '云烟') 
    insert into tb values(1003 ,   '酒' ,       '酒') 
    insert into tb values(1003 ,   '酒' ,       '茅台') 
    go--1
    select 编号, 名称1 , 名称2 from
    (
    select * , 编号 px from tb where 名称1 = 名称2
    union all
    select 编号 = '' , 名称1 , 名称2 , 编号 px from tb where 名称1 <> 名称2
    ) t
    order by px , len(名称2)--2
    select case when 名称2=(select top 1 名称2 from tb where 编号 = a.编号) then 编号 else '' end as 编号,名称1,名称2 from tb adrop table tb/*
    编号         名称1        名称2        
    ---------- ---------- ---------- 
    1001       水          水
               水          矿泉水
    1002       烟          烟
               烟          云烟
               烟          白沙烟
    1003       酒          酒
               酒          茅台(所影响的行数为 7 行)
    */
      

  7.   


    declare @T table (编号 varchar(10) ,名称 varchar(8),名称2 varchar(8))
    insert into @T select 1001,'水','水'
         union all select 1001,'水','矿泉水'
         union all select 1002,'烟','烟'
         union all select 1002,'烟','白沙烟'
         union all select 1002,'烟','云烟'
         union all select 1003,'酒','酒'
         union all select 1003,'酒','茅台'
    --select * from @t
    select * from 
    (select * from @T WHERE 名称=名称2
    union all
    select '',名称,名称2 from @t where 名称!=名称2)a
    order by 名称 desc
    1002 烟 烟
    烟 白沙烟
    烟 云烟
    1001 水 水
    水 矿泉水
    1003 酒 酒
    酒 茅台