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

解决方案 »

  1.   

    --> liangCK小梁 于2008-10-29
    --> 生成测试数据: @T
    DECLARE @T TABLE (编号 INT,名称1 VARCHAR(2),名称2 VARCHAR(6))
    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,'酒','茅台'--SQL查询如下:SELECT CASE WHEN 名称1=名称2
                  THEN RTRIM(编号)
                ELSE '' END 编号,
           CASE WHEN 名称1=名称2
                  THEN 名称1
                ELSE '' END 名称1,
           名称2
    FROM @T/*
    编号           名称1  名称2
    ------------ ---- ------
    1001         水    水
                      矿泉水
    1002         烟    烟
                      白沙烟
                      云烟
    1003         酒    酒
                      茅台(7 行受影响)
    */
      

  2.   


    DECLARE @T TABLE 
    (
    编号 INT,
    名称1 VARCHAR(2),
    名称2 VARCHAR(6)
    )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 CASE WHEN 名称1=名称2 THEN 
    RTRIM(编号)
                ELSE 
    '' 
    END 编号,
           CASE WHEN 名称1=名称2 THEN 
    名称1
                ELSE '' 
    END 名称1,
           名称2
    FROM @T
      

  3.   

    Create table #a(s_no varchar(10),s_name varchar(10),c_name varchar(10))
    Insert into #a select '1001','水','水'
    Insert into #a select '1001','水','矿泉水' 
    Insert into #a select '1002','烟','烟' 
    Insert into #a select '1002','烟','白沙烟' 
    Insert into #a select '1002','烟','云烟' 
    Insert into #a select '1003','酒','酒' 
    Insert into #a select '1003','酒','茅台'select * from #a
    Select 
    s_no=case when c_name=(select top 1 c_name from #a where s_no=a.s_no) then s_no else '' end,
    s_name=case when s_name=(select top 1 s_name from #a where s_name=a.c_name) then s_name else '' end,c_name
    from #a a
    Drop Table #a
      

  4.   

    Create table #a(s_no varchar(10),s_name varchar(10),c_name varchar(10))Insert into #a select '1001','水','矿泉水' 
    Insert into #a select '1002','烟','烟' 
    Insert into #a select '1002','烟','白沙烟' 
    Insert into #a select '1002','烟','云烟' 
    Insert into #a select '1003','酒','酒' 
    Insert into #a select '1003','酒','茅台'
    Insert into #a select '1001','水','水'select *  INTO #b from #a order by s_no,(case when s_name=c_name then 1 else 2 end)
    Select 
    s_no=case when c_name=(select top 1 c_name from #b where s_no=a.s_no) then s_no else '' end,
    s_name=case when s_name=(select top 1 s_name from #b where s_name=a.c_name) then s_name else '' end,c_name
    from #b a
    Drop Table #a,#b
      

  5.   


    SELECT CASE WHEN 名称1=名称2 THEN 
                    RTRIM(编号)
                ELSE 
                    '' 
                END 编号,
           CASE WHEN 名称1=名称2 THEN 
                    名称1
                ELSE '' 
                    END 名称1,
           名称2
    FROM @T
    order by 编号
      

  6.   

    /*
    想要结果如下 
    编号    名称1    名称2 
    1001    水          水 
                        矿泉水 
    1002    烟          烟 
                        白沙烟 
                        云烟 
    1003    酒          酒 
                        茅台 
    */
    create TABLE #EE (id char(10),Info1 VARCHAR(12),Info2 VARCHAR(16))
    INSERT INTO #EE
    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 t.id,t.info1,t.info2 from
    (select *,id px from #EE where Info1=Info2
    union all
    select id='',info1,info2,id px from #EE where Info1<>Info2)
    t order by px,len(info2)