lie1 lie2
a 12
a 51
a 15
a 32
a 26
b 10
b 7
b 9
b 20
想要的结果:
lie1 lie2
a 12
51
15
32
26
b 10
7
9
20
也就是下面一样的重复的为空,只显示第一个

解决方案 »

  1.   

    SELECT lie1,lie2,IDENTITY(int) ID INTO #t FROM tbSELECT CASE WHEN (SELECT COUNT(1) FROM #t b WHERE b.id<a.id AND b.lie1=a.lie1)>0) THEN a.lie1 ELSE '' END,a.lie2 FROM #t a以上代码随便手写,未经测试。这是显示问题,楼主还是交给前台程序去做吧。
      

  2.   

    declare @t table
    (
    lie1 varchar(1),
    lie2 int
    )
    insert into @t
    select 'a',12 union all
    select 'a',51 union all
    select 'a',15 union all
    select 'a',32 union all
    select 'a',26 union all
    select 'b',10 union all
    select 'b',7 union all
    select 'b',9 union all
    select 'b',20select id=identity(int,1,1),* into # from @tselect case when lie1=(select distinct lie1 from # where id+1=a.id) then '' else lie1 end as lie1,lie2
    from # a
    go
    drop table #/*
    lie1 lie2        
    ---- ----------- 
    a    12
         51
         15
         32
         26
    b    10
         7
         9
         20
    */
      

  3.   

    打少一括号(或者说打多了一括号)SELECT CASE WHEN 
              (SELECT COUNT(1) FROM #t b WHERE b.id<a.id AND b.lie1=a.lie1)>0 THEN a.lie1 ELSE '' END,a.lie2 FROM #t a
      

  4.   

    用SQL自带的函数能实现么?记得以前老师讲过,好像是用SQL的自带的聚合函数,现在忘的静悄悄了,希望指点!
      

  5.   

    呵呵,前台是循环,有判断如果字段长度为0,则跳过即可,前台的table已经设置了rowspan
      

  6.   

    那你为什么不在前台用个变量记录字段内容,如果recordset在movenext之后字段内容仍是一样,就不输出. 这样比sql来实现方便的多,效率也高。并且在你现在的情况下也不用过多的操作,因为你本身要判断字段长度是否为0,将这个种判断改成 判断 与那个变量的内容比较即可, 如果相同,则不输出,如果不相同,则输出,同时将变量内容改成这个不相同的字段值。