请教:SQL语句如何实现同一列里如果与上一行数据相同,则这一行该列数据不显示,但是其他列要照样显示。

想要达到效果:
id count
1 1111
2222
3333
2 4444
5555
3 6666

declare @id int,@count char(20)

  print 'id'+'        '+'count'

  declare C_q cursor for  

  select distinct id from qqq

  open C_q

  fetch next from C_q into @id

  while @@fetch_status=0

  begin

  print cast(@id as varchar(10))+':'  

  declare C_ cursor for

  select[count] from qqq

  where id=@id

  open C_

  fetch next from C_ into @count

  while @@fetch_status=0

  begin

  print '          '+@count

  fetch next from C_ into @count

  end

  close C_

  deallocate C_

  print'======================'  

  fetch next from C_q into @id

  end

  close C_q

  deallocate C_q

其实你要做报表使用游标是一个很好的选择。我采用的就是这个方法给你做的,效果一样。不会你再问。望采纳,谢谢!

追问

谢谢。。。不过还是有点复杂

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-04
你可以吧这个 排序一下。 例如 一下在sqlserver 和oracle 中都可以吧
主要思路就是 生成一个id 这个 id 根据第二列分组。 相同的count 会有多个id 依次1.2.3.。。。 所以最后就判断,如果不是1的话 就让它为空 就行了 。
select case when row<>1 then '' end id, count from (
select row_number() over(partiton by count order by count) row,* from tb
) a追问

恩。谢谢。应该是这样的。

第2个回答  2012-05-04
你这个表没有主键啊?没有主键的表是不知道什么是上一行,什么是下一行的。
如果有主键这个就好写了,没有主键没有办法弄。追问

如果有主键的话,要怎么写呢?

追答

你倒是把主键及数据贴出来呀

追问

uid(主) id count
1 1 111
2 1 222
3 1 222
4 2 444
5 2 555
6 3 666
(自动增长)
这样的

追答

select (case when not exists(select 1 from 你的表 where id = a.id and uid<a.uid) then cast(id as varchar) else '' end),count
from 你的表 a

其实如果你的id+count的值是唯一的,也可以这样写:

select (case when cnt = 1 then cast(id as varchar) else '' end) as id,count
from
(
select id,count,(select count(*) from 你的表 where id = a.id and count<=a.count) as cnt
from 你的表 a
) aa

追问

恩实现了。。谢谢。
如果我在加一张表。让上面的表和表2关联查询可以吗?
表2:
uid(主) id name
1 1 小麦
2 1 大米
3 1 稻子
4 2 五花肉
5 2 大排
6 3 香蕉
想要这样的结果:
id count name
1 111 小麦
222 大米
333 稻子
2 444 五花肉
555 大排
3 666 香蕉

追答

select (case when not exists(select 1 from 你的表1 where id = a.id and uid<a.uid) then cast(id as varchar) else '' end),a.count,b.name
from 你的表1 a
Join 你的表2 b on a.count = b.count --是这两个字段关联吗?

本回答被提问者采纳
第3个回答  2012-05-04
用distinct就行了,这个就是对相同的过滤,
SELECT DISTINCT 列名称 FROM 表名称
SELECT DISTINCT ID,COUNT FROM 表追问

不行啊。这个distinct只是根据某一字段去除相同的内容,该重复行后面不重复的内容就不显示了。

第4个回答  2012-05-04
这个不好搞
sql肯定不是你最终展示给客户看的撒
所以我建议你在程序里展示的时候去做这个处理
比如在页面 循环展示的时候 存储一个变量 当发现本次的值和上次存下来的值不一样 才展示 否则不展示追问

我这个要做报表。。。所以没有页面。

追答

我不信这个是直接展示给客户看的 不管是页面还是导出excel 都在程序处理

相似回答