多表合计查询 with 写法

补充数据:

1、产品表,Goods,字段ID/Name。

A001/B2铅笔

2、入货表,DetailIn,字段ID/GoodsId/Quantity。

1/A001/100
2/A001/200
3/A001/500

3、出库表,DetailOut,字段ID/GoodsId/Quantity。

1/A001/400
2/A001/80

用上述Left Join查询出来的结果:
Id/Name/dInQty/dOutQty/dLeftQty
A001/B2铅笔/1600/1440/160

结果可以看出,入库合计变成了入库合计*出库次数,出库合计变成了出库合计*入库次数。我想问有没有办法一个SQL里实现各算各的。

 

学习到的新写法:

;WITH I AS
(
SELECT GoodsId,SUM(Quantity) Quantity
FROM DetailIn
GROUP BY GoodsId
), O AS
(
SELECT GoodsId,SUM(Quantity) Quantity
FROM DetailOut
GROUP BY GoodsId
)

SELECT G.*,ISNULL(I.Quantity,0) dInQty,ISNULL(O.Quantity,0) dOutQty,ISNULL(I.Quantity,0)-ISNULL(O.Quantity,0) dLeftQty
FROM Goods G LEFT JOIN I ON G.ID=I.GoodsId
LEFT JOIN O ON G.ID=O.GoodsId


 

第二种left join 写法

----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-09-30 10:54:42
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
--	Jun 10 2013 20:09:10 
--	Copyright (c) Microsoft Corporation
--	Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[Goods]
if object_id('[Goods]') is not null drop table [Goods]
go 
create table [Goods]([字段ID] varchar(4),[Name] varchar(6))
insert [Goods]
select 'A001','B2铅笔'
--> 测试数据:[DetailIn]
if object_id('[DetailIn]') is not null drop table [DetailIn]
go 
create table [DetailIn]([字段ID] int,[GoodsId] varchar(4),[Quantity] int)
insert [DetailIn]
select 1,'A001',100 union all
select 2,'A001',200 union all
select 3,'A001',500
--> 测试数据:[DetailOut]
if object_id('[DetailOut]') is not null drop table [DetailOut]
go 
create table [DetailOut]([字段ID] int,[GoodsId] varchar(4),[Quantity] int)
insert [DetailOut]
select 1,'A001',400 union all
select 2,'A001',80
--------------开始查询--------------------------



select a.*,[DetailIn].[Quantity],[DetailOut].[Quantity]
from [Goods] a LEFT JOIN (SELECT goodsid,SUM([Quantity])[Quantity] FROM [DetailIn] GROUP BY goodsid)[DetailIn] ON a.[字段ID]=[DetailIn].goodsid
LEFT JOIN (SELECT goodsid,SUM([Quantity])[Quantity] FROM [DetailOut] GROUP BY goodsid)[DetailOut] ON a.[字段ID]=[DetailOut].goodsid
----------------结果----------------------------
/* 
字段ID Name   Quantity    Quantity
---- ------ ----------- -----------
A001 B2铅笔   800         480
*/


 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值