首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

查询的准确性解决办法

2013-10-30 
查询的准确性订单表订单号产品名称订单数量单位131110AA100华能配送表订单号产品名称配送数量出货仓库单位

查询的准确性
订单表
订单号      产品名称    订单数量      单位
131110       AA        100        华能
配送表
订单号     产品名称     配送数量     出货仓库     单位
131110      AA         100        A          华能


出库表
订单号      产品名称     出库数量     出货仓库     
131110       AA         30         A
131110       AA         40         B
131110       AA         20         C

   
要求结果
订单号     产品名称  订单数量配送数量出库数量单位出货仓库    未出库数量
131110    AA10010030华能A           10
131110    AA10010040华能B           10
131110    AA10010020 华能C           10



[解决办法]
未出库量10?不是很理解,愚昧的问下是(配送量(100)-各个仓库出货量的和(90))吗?
[解决办法]
方法1,适合sql server 2000:

;with 订单表(订单号,产品名称,订单数量,单位) as
(
select 131110,'AA',100,'华能'
),
配送表(订单号,产品名称,配送数量,出货仓库,单位) as
(
select 131110,'AA',100,'A','华能'
),
出库表(订单号,产品名称,出库数量,出货仓库 ) as
(
select 131110,'AA',30,'A'
union all select 131110,'AA',40,'B'
union all select 131110,'AA',20,'C'
)

select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
b.配送数量-(select sum(d.出库数量) 
           from 出库表 d 
           where d.订单号 = a.订单号 and 
                 d.产品名称 = a.产品名称) as 未出库数量
from 订单表 a
left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称

/*
订单号产品名称订单数量配送数量出库数量单位出货仓库未出库数量
131110AA    100    100    30    华能A    10
131110AA    100    100    40     华能B    10
131110AA    100    100    20    华能C    10
*/


方法2,适合sql server 2005:

select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
b.配送数量-(sum(c.出库数量) over(partition by a.订单号,a.产品名称)) as 未出库数量
from 订单表 a
left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称

/*
订单号产品名称订单数量配送数量出库数量单位出货仓库未出库数量
131110AA    100    100    30    华能A    10
131110AA    100    100    40     华能B    10
131110AA    100    100    20    华能C    10
*/

[解决办法]
用二楼的试试,二楼的代码可以运行得到你想要的结果,而且也挺简便的。带对于server 2000的话,with cte查询就没作用了。

热点排行