日期:2014-05-20  浏览次数:20645 次

求一段sql,急!
表1计划

商品,日期,计划数量,
-------------------
牙膏,2007-7-7,10
铅笔,2007-7-7,10
橡皮,2007-7-7,5
钢笔,2007-7-7,10

表2实际

商品,日期,销售数量,
-------------------
牙膏,2007-7-7,10
铅笔,2007-7-7,5
橡皮,2007-7-7,10
格尺,2007-7-7,10

求表3比较

商品,日期,计划数量,销售数量,
-------------------
牙膏,2007-7-7,10,10
铅笔,2007-7-7,10,5
橡皮,2007-7-7,5   ,10
钢笔,2007-7-7,10,0
格尺,2007-7-7,0   ,10

------解决方案--------------------
select a.商品,isNull(b.日期,c.日期),
isNull(b.计划数量,0) as 计划数量,
isNull(c.销售数量,0) as 销售数量
from
(select 商品 from 表1 union
select 商品 from 表2) a
left join 表1 b on a.商品=b.商品
left join 表2 c on a.商品=c.商品
------解决方案--------------------
结果
商品 日期 计划数量 销售数量
钢笔 2007-7-7 10 0
格尺 2007-7-7 0 10
铅笔 2007-7-7 10 5
橡皮 2007-7-7 5 10
牙膏 2007-7-7 10 10
----------------------------------------------

SELECT
计划.商品 AS 商品,
计划.日期 AS 日期,
计划.计划数量 AS 计划数量,
(SELECT SUM(销售数量) FROM 实际 WHERE 计划.商品=实际.商品 AND 计划.日期=实际.日期) AS 销售数量
FROM 计划
WHERE EXISTS (
SELECT *
FROM 实际
WHERE 计划.商品=实际.商品 AND 计划.日期=实际.日期
)
UNION
SELECT
实际.商品 AS 商品,
实际.日期 AS 日期,
0 AS 计划数量,
实际.销售数量 AS 销售数量
FROM 实际
WHERE NOT EXISTS (
SELECT *
FROM 计划
WHERE 计划.商品=实际.商品 AND 计划.日期=实际.日期
)
UNION
SELECT
计划.商品 AS 商品,
计划.日期 AS 日期,
计划.计划数量 AS 计划数量,
0 AS 销售数量
FROM 计划
WHERE NOT EXISTS (
SELECT *
FROM 实际
WHERE 计划.商品=实际.商品 AND 计划.日期=实际.日期
)