这样的SQL问题,看来有点难。 (50分)

  • 主题发起人 主题发起人 Hecules
  • 开始时间 开始时间
H

Hecules

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个字典表:价位。
(编号/开始价位/结束价位/备注)
bh ksjw jsjw bz
====================================================
01 1.00 1000.00 从1.00到1000.00
02 1001.00 2000.00 从1001.00到2000.00
03 2001.00 3000.00 从2001.00到3000.00
04 3001.00 5000.00 从3001.00到5000.00
05 5001.00 10000.00 从5001.00到10000.00
06 10001.00 100000.00 从10001.00到100000.00

有一个销售表。
(货品编号/价格/数量/金额)
hpbh jg sl je
===============================================
1001 500.33 3 1500.99
1211 1200.50 1 1200.50
1312 3410.00 2 6820.00
3433 10100.00 4 40400.00

要对:销售表作:按价位统计。结果如下:
(价位/数量/金额)
jw sl je
==================================================
从1.00到1000.00 3 1500.99
从1001.00到2000.00 1 1200.50
从2001.00到3000.00 0 0.00
从3001.00到5000.00 2 6820.00
从5001.00到10000.00 0 0.00
从10001.00到100000.00 4 40400.00

这样的SQL,如何写?
 
select bz jw,
(select sum(sl) from 销售表 where jg>=a.ksjw and jg<=a.jsjw) sl,
(select sum(je) from 销售表 where jg>=a.ksjw and jg<=a.jsjw) je
from 价位 a
 
SELECT a.bz as jw ,isnull(b.sl,0) as sl ,isnull(b.je,0) as je
from 价位表 a left outer join 销售表 b on b.jg between a.ksjw and a.jsjw
测试成功!
理解出错!引用楼上的稍做修改!如下:
select bz jw,
(select isnull(sum(sl),0) from 销售表 where jg between a.ksjw and a.jsjw) sl,
(select isnull(sum(je),0) from 销售表 where jg between a.ksjw and a.jsjw) je
from 价位表 a


 
select d1.bz,(select sum(d2.sl) from 销售表 d2 where d2.jg>=d1.ksjw and d2.jg<d1.jsjw) as sl,
(select sum(d2.je) from 销售表 d2 where d2.jg>=d1.ksjw and d2.jg<d1.jsjw) as je
from 字典表 d1
 
SELECT BZ,ISNULL(SUM(SL),0),ISNULL(SUM(JE),0)
FROM 价位 LEFT JOIN 销售表 ON KSJW<=JG AND JG<=JSJW
GROUP BY BZ
 
select a.bz jw,nvl(b.sl,0.00) sl,nvl(b.je,0.00) je
from zd a,xs b
where a.ksjw<b.jg(+)
and a.jsjw>b.jg(+)

oracle 测试完成
 
再请教:
如果,增加两个统计条件。如下:
有一个字典表:价位。
(编号/开始价位/结束价位/备注)
bh ksjw jsjw bz
====================================================
01 1.00 1000.00 从1.00到1000.00
02 1001.00 2000.00 从1001.00到2000.00
03 2001.00 3000.00 从2001.00到3000.00
04 3001.00 5000.00 从3001.00到5000.00
05 5001.00 10000.00 从5001.00到10000.00
06 10001.00 100000.00 从10001.00到100000.00
...

有一个类别表。
(编号/名称)
bh mc
===================
01 蔬菜
02 水果
...

有一个生产厂商表。
(编号/名称)
bh mc
===================
01 AA公司
02 BB公司
...

有一个货品表。
(货品编号/类别/生产厂商)
hpbh lb sccs
===============================
1001 01 02
1211 02 02
1312 01 01
3433 01 02
...

有一个销售表。
(货品编号/价格/数量/金额)
hpbh jg sl je
===============================================
1001 500.33 3 1500.99
1211 1200.50 1 1200.50
1312 3410.00 2 6820.00
3433 10100.00 4 40400.00
...

已经作了个:视图:
(货品编号/类别/生产厂商/价格/数量/金额)
hpbh lb sccs jg sl je
=========================================================
1001 01 02 500.33 3 1500.99
1211 02 02 1200.50 1 1200.50
1312 01 01 3410.00 2 6820.00
3433 01 02 10100.00 4 40400.00
...

要对:销售表,同时作:按类别,按生产厂商,按价位统计。结果如下:
(价位/数量/金额)
lb sccs jw sl je
=================================================================
01 01 从1.00到1000.00 0 0.00
01 01 从1001.00到2000.00 0 0.00
01 01 从2001.00到3000.00 0 0.00
01 01 从3001.00到5000.00 2 6820.00
01 01 从5001.00到10000.00 0 0.00
01 01 从10001.00到100000.00 0 0.00
01 02 从1.00到1000.00 0 0.00
01 02 从1001.00到2000.00 0 0.00
01 02 从2001.00到3000.00 0 0.00
01 02 从3001.00到5000.00 0 0.00
01 02 从5001.00到10000.00 0 0.00
01 02 从10001.00到100000.00 4 40400.00
....
如此。SQL,改如何写?
 
SELECT LB,SCCS,BZ,ISNULL(SUM(SL),0),ISNULL(SUM(JE),0)
FROM 货品表 LEFT JOIN 价位表 ON 1 = 1
LEFT JOIN 销售表 ON KSJW<=JG AND JG<=JSJW
AND GOODS.HPBH = SALE.HPBH
GROUP BY LB,SCCS,BZ
 
多人接受答案了。
 
后退
顶部