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

解决方案 »

  1.   

    首先数据1做一个行列转换
    然后join一下数据2
      

  2.   

    sql的行转列
    http://topic.csdn.net/u/20090705/15/7669340b-c90a-4114-b009-c6088fe5639b.html
      

  3.   

    此贴二楼已回:http://topic.csdn.net/u/20100503/19/ce768ae1-1fbc-4d66-8dc9-16856a91595f.html
      

  4.   

    --------------------SQL Server数据格式化工具-------------------
    ---------------------------------------------------------------
    -- 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 行受影响)
    */
      

  5.   


    select distinct a.字段,b.字段,c.字段
    from 数据源1表 A,数据源1表 B,数据源2表 C
    where a.日期=b.日期 and a.商品=b.商品 and a.日期=c.日期 and a.商品=c.商品 
      

  6.   

    SELECT 日期 = B.BDATETIME, 商品 = B.BPRODUCT
    , 采购入库数量 = 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