34,576
社区成员
发帖
与我相关
我的任务
分享
select * from (
select 入库单位,物料编码,sum(数量) as 数量 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
where a.业务类型='入库'
group by a.入库单位 ,物料编码) 入库数据
left join
(
select 出库单位,物料编码,sum(数量) as 数量 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
where a.业务类型='出库'
group by 出库单位,物料编码) 出库数据
on 入库数据.入库单位=出库数据.出库单位 and 入库数据.物料编码=出库数据.物料编码
select distinct 单位,物料编码 from (
select 入库单位 as 单位,物料编码 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
union all
select 出库单位 as 单位,物料编码 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID ) 仓库物料
select 入库单位,物料编码,
sum(case when 业务类型='入库' then 数量 else 0 end) as 入库数量,
sum(case when 业务类型='出库' then 数量 else 0 end) as 出库数量
from 出入库_主表 a
inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
group by 出库单位,物料编码
回复于: 2017-09-21 14:48:21 #2 得分:0 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
RINK_1
RINK_1
RINK_1 T5
每条出入库明细数据都是入库单位和出库单位同时存在有效值的?
select case when 业务类型='入库' then 入库单位 else 出库单位 end as 单位,物料编码
from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
GROUP BY case when 业务类型='入库' then 入库单位 else 出库单位 end as 单位,物料编码
这是最终需要优化的代码。。。一开始准备用第一种方式了。 后来发现如果无出入库的话, 会丢失一部分物料编码。
优化这条吧[/quote]
你是从出入库_主表和出入库_明细取数,当然是只有发生过出入库的物料编码才会出现。如果你要把从来没有发生过出入库的物料编码也统计进去,这些物料编码下是存在入库单位还是出库单位呢。
那个合计出入库数量的代码有些问题,再试试下面的。
select case when 业务类型='入库' then 入库单位 else 出库单位 end as 单位,
物料编码,
sum(case when 业务类型='入库' then 数量 else 0 end) as 入库数量,
sum(case when 业务类型='出库' then 数量 else 0 end) as 出库数量
from 出入库_主表 a
inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
group by case when 业务类型='入库' then 入库单位 else 出库单位 end as 单位,物料编码
IF OBJECT_ID('tempdb..#tmp_rk') IS NOT NULL
DROP TABLE #tmp_rk
SELECT 入库单位 as 单位, 物料编码, SUM(数量) AS 数量
INTO #tmp_rk
FROM 出入库_主表 a
INNER JOIN 出入库_明细 b ON a.ExcelServerRCID = b.ExcelServerRCID
WHERE a.业务类型 = '入库'
GROUP BY a.入库单位, 物料编码
IF OBJECT_ID('tempdb..#tmp_ck') IS NOT NULL
DROP TABLE #tmp_ck
SELECT 出库单位 AS 单位, 物料编码, SUM(数量) AS 数量
INTO #tmp_ck
FROM 出入库_主表 a
INNER JOIN 出入库_明细 b ON a.ExcelServerRCID = b.ExcelServerRCID
WHERE a.业务类型 = '出库' AND a.单据状态 = '已确认'
GROUP BY 出库单位, 物料编码
SELECT 仓库物料.单位,仓库物料.物料编码, ISNULL(入库数据.数量, 0) AS 入库数量, ISNULL(出库数据.数量, 0) AS 出库数量, ISNULL(入库数据.数量, 0)-ISNULL(出库数据.数量, 0) AS 库存数量
FROM (
SELECT 单位, 物料编码
FROM (
SELECT 单位, 物料编码
FROM #tmp_rk
UNION
SELECT 单位, 物料编码
FROM #tmp_ck
) 物料资料
)仓库物料
LEFT JOIN #tmp_rk 入库数据
ON 仓库物料.单位 = 入库数据.单位 AND 仓库物料.物料编码 = 入库数据.物料编码
LEFT JOIN #tmp_ck 出库数据
ON 仓库物料.单位 = 出库数据.单位 AND 仓库物料.物料编码 = 出库数据.物料编码
试试
select 入库单位,物料编码,
sum(case when 业务类型='入库' then 数量 else 0 end) as 入库数量,
sum(case when 业务类型='出库' then 数量 else 0 end) as 出库数量
from 出入库_主表 a
inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
group by 出库单位,物料编码
select 仓库物料.* ,isnull(入库数据.数量,0) as 入库数量 ,isnull(出库数据.数量,0) as 出库数量,isnull(入库数据.数量,0) -isnull(出库数据.数量,0) as 库存数量 from
(
select distinct 单位,物料编码 from (
select 入库单位 as 单位,物料编码 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
union all
select 出库单位 as 单位,物料编码 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID ) 物料资料 )仓库物料
left join
(select 入库单位 单位,物料编码,sum(数量) as 数量 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
where a.业务类型='入库'
group by a.入库单位 ,物料编码) 入库数据 on 仓库物料.单位=入库数据.单位 and 仓库物料.物料编码=入库数据.物料编码
left join
(
select 出库单位 as 单位,物料编码,sum(数量) as 数量 from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
where a.业务类型='出库' and a.单据状态='已确认'
group by 出库单位,物料编码) 出库数据
on 仓库物料.单位=出库数据.单位 and 仓库物料.物料编码=出库数据.物料编码
select 入库单位,物料编码,
sum(case when 业务类型='入库' then 数量 else 0 end) as 入库数量,
sum(case when 业务类型='出库' then 数量 else 0 end) as 出库数量
from 出入库_主表 a
inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
group by 出库单位,物料编码
回复于: 2017-09-21 14:48:21 #2 得分:0 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
RINK_1
RINK_1
RINK_1 T5
每条出入库明细数据都是入库单位和出库单位同时存在有效值的?
select case when 业务类型='入库' then 入库单位 else 出库单位 end as 单位,物料编码
from 出入库_主表 a inner join 出入库_明细 b on a.ExcelServerRCID =b.ExcelServerRCID
GROUP BY case when 业务类型='入库' then 入库单位 else 出库单位 end as 单位,物料编码
这是最终需要优化的代码。。。一开始准备用第一种方式了。 后来发现如果无出入库的话, 会丢失一部分物料编码。
优化这条吧