一个很长很长的标题 问一个很长很长的问题~~~~~~~~~~~~~~~~~~~~~希望大大们能看到。。。。。。

tojht 2009-11-10 02:40:27
现有表:

km kmdm begin end km2 kmdm2 begin2 end2 sid dw
a b 1
101 aaa 100.00 50.00 201 bbb 120.00 30.00 2 1
102 aab 100.00 50.00 201 bbb 120.00 30.00 2 1
103 aac 100.00 50.00 202 bbc 120.00 30.00 2 1



c 10 1
301 ccc 100.00 50.00 11 1
303 cab 23.00 12.00 11 1

d e 20 1
501 aaa 100.00 50.00 401 bbb 120.00 30.00 21 1
501 aaa 100.00 50.00 402 bba 120.00 30.00 21 1
501 aaa 100.00 50.00 401 bbb 120.00 30.00 21 1
507 asd 100.00 50.00 402 bba 120.00 30.00 21 1

hz 700.00 350.00 hz 963.00 272.00 30 1
___________________________________________________________________________________________________
a b 1
101 aaa 100.00 50.00 201 bbb 120.00 30.00 2 2
102 aab 100.00 50.00 201 bbb 120.00 30.00 2 2
103 aac 100.00 50.00 202 bbc 120.00 30.00 2 2



c 10 2
301 ccc 100.00 50.00 11 2
303 cab 23.00 12.00 11 2

d e 20 2
501 aaa 100.00 50.00 401 bbb 120.00 30.00 21 2
502 aac 100.00 50.00 402 bba 120.00 30.00 21 2
501 aaa 100.00 50.00 401 bbb 120.00 30.00 21 2
507 asd 100.00 50.00 402 bba 120.00 30.00 21 2
507 asd 100.00 50.00 403 bca 120.00 30.00 21 2

hz XXX.00 XXX.00 hz XXX.00 XXX.00 30 2



这里面有很多重复的字段 怎么样才能把重复的字段取消掉 或者替换成NULL也好。。。 让它显示为 例如

km kmdm begin end km2 kmdm2 begin2 end2 sid dw
a b 1
101 aaa 100.00 50.00 201 bbb 120.00 30.00 2 1
102 aab 100.00 50.00
103 aac 100.00 50.00 202 bbc 120.00 30.00 2 1



c 10 1
301 ccc 100.00 50.00 11 1
303 cab 23.00 12.00 11 1

d e 20 1
501 aaa 100.00 50.00 401 bbb 120.00 30.00 21 1
507 asd 100.00 50.00 402 bba 120.00 30.00 21 1

hz 700.00 350.00 hz 963.00 272.00 30 1
___________________________________________________________________________________________________
a b 1
101 aaa 100.00 50.00 201 bbb 120.00 30.00 2 2
102 aab 100.00 50.00
103 aac 100.00 50.00 202 bbc 120.00 30.00 2 2



c 10 2
301 ccc 100.00 50.00 11 2
303 cab 23.00 12.00 11 2

d e 20 2
501 aaa 100.00 50.00 401 bbb 120.00 30.00 21 2
502 aac 100.00 50.00 402 bba 120.00 30.00 21 2
507 asd 100.00 50.00 403 bca 120.00 30.00 21 2

hz XXX.00 XXX.00 hz XXX.00 XXX.00 30 2



谢谢各位。。。
...全文
142 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2009-11-16
  • 打赏
  • 举报
回复
不好意思,刚看到回复
这是1个表的5个部分?看着挺别扭
这样的话,a,b,c,d,e之间还有什么联系呢?
你分开写成
select distinct km ,kmdm,begin,end from table1;
select distinct km1 ,kmdm1,begin1,end1 from table1;
....
不是更好?
tojht 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wildwave 的回复:]
啊,不是相邻的也要去掉,你的意思是不是说只要出现过一下,下面就不再显示?这这样很奇怪啊,不显示的话谁知道它应该是502还是503什么的
[/Quote]


这里的DW字段 是一个标识 例如 DW=1 为一块内容 DW=2 是一块
而我现在的表 就是像最上面的表一样 例如 DW=2那里的D部分 有2个501 E部分 有2个 401 ,402 这些数据是一摸一样的 完全重复 所以 我只要留下一个 其他显示NULL 也就是变成题目最下方那个DW=2的样子。。

我表达能力不是很好 真是麻烦你了 呵呵
小灰狼W 2009-11-12
  • 打赏
  • 举报
回复
啊,不是相邻的也要去掉,你的意思是不是说只要出现过一下,下面就不再显示?这这样很奇怪啊,不显示的话谁知道它应该是502还是503什么的
tojht 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wildwave 的回复:]
或者写到子查询中
select decode(flag_a,0,km) km,
  decode(flag_a,0,kmdm)kmdm,
....
from(select t.*,
      case when km=lag(km)over(partition by rownum) then 1 else 0 end flag_a,
      case ................ flag_b..
    from table1 t)

[/Quote]


那如果我有一字段是这样的

km
501
502
503
501
这样的话 他不会把第二个出现的501取消掉。。。。怎么办呢?
小灰狼W 2009-11-12
  • 打赏
  • 举报
回复
或者写到子查询中
select decode(flag_a,0,km) km,
decode(flag_a,0,kmdm)kmdm,
....
from(select t.*,
case when km=lag(km)over(partition by rownum) then 1 else 0 end flag_a,
case ................ flag_b..
from table1 t)
小灰狼W 2009-11-12
  • 打赏
  • 举报
回复
lag是分析函数,要实现你需要的功能需要用到这个函数。这个函数返回上一条记录中的某一字段值,你将它与当前记录比较,如果相同,则显示空值。就能实现你要的效果。不排序的话就按rownum
我写个km字段的,你参照下改其他的字段代码

select case when km=lag(km)over(order by rownum) then null else km end km,
case when km=lag(km)over(order by rownum) then null else kmdm end kmdm ,
......
from ...
where ...
shiyiwan 2009-11-12
  • 打赏
  • 举报
回复
果然是很長
tojht 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wildwave 的回复:]
问题好长啊..可以把例子精简来说明的
楼主是想将左右两段的km和km2字段的值中,如果和前一条记录值相同,则不显示对吧
case when km=lag(km)over(order by ..) then null else km end
km2字段同样处理

楼主可以试试
如果还写不了说明清楚一点,这个表不知道按什么排序,而且中间是不是空上一段,看着有点别扭..
[/Quote]


楼上大大 你的LAG函数我不是很懂 可以解释下么 ? 这个表 分为ABCDE 5个部分 不排序 要求显示出来就是这种格式 其中 例如 B部分 有2个201 数据时一样的 所以要求只显示一个 我不知道怎么把它挑出来更新成空值。。。。~
小灰狼W 2009-11-10
  • 打赏
  • 举报
回复
问题好长啊..可以把例子精简来说明的
楼主是想将左右两段的km和km2字段的值中,如果和前一条记录值相同,则不显示对吧
case when km=lag(km)over(order by ..) then null else km end
km2字段同样处理

楼主可以试试
如果还写不了说明清楚一点,这个表不知道按什么排序,而且中间是不是空上一段,看着有点别扭..
Adebayor 2009-11-10
  • 打赏
  • 举报
回复
select distinct km,kmdm,begin,end,km2,kmdm2,begin2,end2,sid,dwa from table
liusong_china 2009-11-10
  • 打赏
  • 举报
回复
select distinct km,kmdm,begin,end from a;
.........

3,496

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧