1、数据源1(业务流水表)
日期 业务类型 商品 数量 金额
2010-4-21 采购入库 001 100 1000
2010-4-21 销售出库 001 50 500
2010-4-21 采购入库 002 20 400
2010-4-21 销售出库 002 15 300
数据源2(历史库存表)
日期 商品 数量 金额
2010-4-21 001 50 500
2010-4-21 002 5 100用SQL语句提取数据源1、2实现下列结果
结果:
日期 商品 采购入库数量 采购入库金额 销售出库数量 销售出库金额 库存
数量 库存
金额
2010-4-21 001 100 1000 50 500 50 500
2010-4-21 002 20 400 15 300 5 100
日期 业务类型 商品 数量 金额
2010-4-21 采购入库 001 100 1000
2010-4-21 销售出库 001 50 500
2010-4-21 采购入库 002 20 400
2010-4-21 销售出库 002 15 300
数据源2(历史库存表)
日期 商品 数量 金额
2010-4-21 001 50 500
2010-4-21 002 5 100用SQL语句提取数据源1、2实现下列结果
结果:
日期 商品 采购入库数量 采购入库金额 销售出库数量 销售出库金额 库存
数量 库存
金额
2010-4-21 001 100 1000 50 500 50 500
2010-4-21 002 20 400 15 300 5 100
然后join一下数据2
http://topic.csdn.net/u/20090705/15/7669340b-c90a-4114-b009-c6088fe5639b.html
---------------------------------------------------------------
-- DESIGNER :happycell188(喜喜)
-- QQ :584738179
-- Development Tool :Microsoft Visual C++ 6.0 C Language
-- FUNCTION :CONVERT DATA TO T-SQL
---------------------------------------------------------------
-- Microsoft SQL Server 2005
-- Developer Edition on Microsoft Windows XP [版本 5.1.2600]
---------------------------------------------------------------
---------------------------------------------------------------use test
go
if object_id('test.dbo.tb1') is not null drop table tb1
-- 创建数据表
create table tb1
(
日期 datetime,
业务类型 varchar(10),
商品 char(4),
数量 int,
金额 int
)
go
--插入测试数据
insert into tb1 select '2010-4-21','采购入库','001',100,1000
union all select '2010-4-21','销售出库','001',50,500
union all select '2010-4-21','采购入库','002',20,400
union all select '2010-4-21','销售出库','002',15,300
go
if object_id('test.dbo.tb2') is not null drop table tb2
-- 创建数据表
create table tb2
(
日期 datetime,
商品 char(4),
数量 int,
金额 int
)
go
--插入测试数据
insert into tb2 select '2010-4-21','001',50,500
union all select '2010-4-21','002',5,100
go
--代码实现select 日期=convert(varchar(10),tb1.日期,120),tb1.商品,
采购入库数量=max(case when 业务类型='采购入库' then tb1.数量 end),
采购入库金额=max(case when 业务类型='采购入库' then tb1.金额 end),
销售出库数量=max(case when 业务类型='销售出库' then tb1.数量 end),
销售出库金额=max(case when 业务类型='销售出库' then tb1.金额 end),
库存数量=max(tb2.数量),库存金额=max(tb2.金额)
from tb1 full join tb2
on tb1.日期=tb2.日期 and tb1.商品=tb2.商品
group by tb1.日期,tb1.商品/*测试结果日期 商品 采购入库数量 采购入库金额 销售出库数量 销售出库金额 库存数量 库存金额
-------------------------------------------------------------------------------------------
2010-4-21 001 100 1000 50 500 50 500
2010-4-21 002 20 400 15 300 5 100
(2 行受影响)
*/
select distinct a.字段,b.字段,c.字段
from 数据源1表 A,数据源1表 B,数据源2表 C
where a.日期=b.日期 and a.商品=b.商品 and a.日期=c.日期 and a.商品=c.商品
, 采购入库数量 = SUM(CASE WHEN B.BTYPE = '采购入库' THEN B.BQUANTITY END)
, 采购入库金额 = SUM(CASE WHEN B.BTYPE = '采购入库' THEN B.BAMOUNT END)
, 销售出库数量 = SUM(CASE WHEN B.BTYPE = '销售出库' THEN B.BQUANTITY END)
, 销售出库金额 = SUM(CASE WHEN B.BTYPE = '销售出库' THEN B.BAMOUNT END)
, 库存数量 = MAX(S.SQUANTITY)
, 库存金额 = MAX(S.SAMOUNT)
FROM BUSINESS B
LEFT JOIN STOCK S ON B.BDATETIME = S.SDATETIME AND B.BPRODUCT = S.SPRODUCT
GROUP BY B.BDATETIME, B.BPRODUCT