请帮我修改这个SQL语句(100分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
用Oracle8.04建立一个表kmsz,其数据如下:
kmsz
kmbm kmmc qcye
101 a
10101 b 10
10102 c 20
102 d
10201 e 30
111 f
201 g 40
如果这样写SQL语句:
select ax.kmbm,sum(bx.qcye) as qcye
from fstao.kmsz ax, fstao.kmsz bx where
(bx.kmbm like concat(ax.kmbm, '%'))
group by ax.kmbm
运行的结果是:
kmsz
kmbm qcye
101 30
10101 10
10102 20
102 30
10201 30
111
201 40

但我想显示Kmmc的数据,我这样写:
select ax.kmbm,sum(bx.qcye) as qcye,cx.kmmc
from fstao.kmsz ax, fstao.kmsz bx,fstao.kmsz cx where
(bx.kmbm like concat(ax.kmbm, '%'))
group by ax.kmbm,cx.kmmc

一运行时,出现很多重复数据(数据太多,所以不能列出),而不是:
kmsz
kmbm kmmc qcye
101 a 30
10101 b 10
10102 c 20
102 d 30
10201 e 30
111 f
201 g 40

请问如何修改SQL语句? 或者用其它方法?但有一点,表kmsz里的数据不止
这么多,有可能几百条或几千条数据。多谢!另外给一个Update的写法。
 
一般我遇到类似情况时用两个query, 一个查group by的数据, 另一个查所有
单项数据. 然后用master-detail方式将两个query关联.

如果你一定要得到一个结果表, 那么先将group by的结果保存到个临时表
再和原始表join得到最终结果表. 或者试试union.
 
这个问题我自己已经解决,请版主把删除
 
拿出的分,泼出去的水,收不回的!
 
等 CJ可以搞定。
 
select ax.kmbm,sum(bx.qcye) as qcye,min(ax.kmmc) as kmmc
from fstao.kmsz ax, fstao.kmsz bx,fstao.kmsz cx where
(bx.kmbm like concat(ax.kmbm, '%'))
group by ax.kmbm
 
fstao:
有人回答就删不掉了,只怪你动作太慢 :-(((
 
后退
顶部