日期:2014-05-17  浏览次数:20533 次

SQL 改写求助
来求助:想把下面的子查询改为连接方式写法


/*CREATE TABLE 库存(货号 INT, 数量 INT, 入库日期 INT,  出库日期 INT)
INSERT 库存
select '1', '1', '20130701', ' 20130710' union all
select '1', '2', '20130702', ' 20130704' union all
select '1', '3', '20130703', ' 20130708' union all
select '1', '4', '20130705', ' 20130706' union all
select '2', '1', '20130701', ' 20130703' union all
select '2', '2', '20130702', ' 20130705' union all
select '2', '3', '20130703', ' 20130704'
SELECT * FROM 库存
--数据表格*/
SELECT 货号,MAX(数量) 历史最大库存
FROM(
select 货号 ,入库日期, 数量=(select sum(c.数量) 
from 库存 c 
where c.入库日期<=m.入库日期 and c.出库日期>=m.入库日期 and c.货号=m.货号
)
from 库存 m) T
GROUP BY 货号

先谢过各位大大了!
SQL select

------解决方案--------------------

/*
CREATE TABLE 库存(货号 INT, 数量 INT, 入库日期 INT,  出库日期 INT)
INSERT 库存
select '1', '1', '20130701', ' 20130710' union all
select '1', '2', '20130702', ' 20130704' union all
select '1', '3', '20130703', ' 20130708' union all
select '1', '4', '20130705', ' 20130706' union all
select '2', '1', '20130701', ' 20130703' union all
select '2', '2', '20130702', ' 20130705' union all
select '2', '3', '20130703', ' 20130704'
SELECT * FROM 库存
--数据表格
*/

select 货号,max(数量) as 数量
from 
(
select 货号,数量=isnull((select sum(数量) from 库存 a where t.货号=a.货号 and a.入库日期<=t.入库日期),0)
-isnull((select sum(数量) from 库存 b where t.货号=b.货号 and b.出库日期<=t.入库日期),0)
from 库存 t
)tb
group by 货号