大家好,请问我现在有三张表A,B,C 
其中结构如下:
订单表A:
商品名称   数量   承运商名
  笔        4       yz
  书        5       sf
 笔/书      2       sf库存表B:
承运商   商品名称   数量    仓库类型
 sf        笔        10         1
 sf        书        20         1
 yz        笔        22         2
 yz        书        13         2承运商C:
 名称     简写   仓库类型
  顺丰     sf       1
  邮政     yz       2
  EMS      ems      2
请问,我想按仓库类型将订单表的的礼品数量对应增加到库存表中,在MSSQL2000中,要怎样写?
理想结果为:
库存表B:
承运商   商品名称   数量    仓库类型
 sf        笔        12        1
 sf        书        27         1
 yz        笔        26         2
 yz        书        13         2
 ems       笔        26         2
 ems       书        13         2
  

解决方案 »

  1.   

    拆分表a,与B,C 表left join
      

  2.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-19 22:53:10
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#A
    if object_id('tempdb.dbo.#A') is not null drop table #A
    go 
    create table #A([商品名称] varchar(5),[数量] int,[承运商名] varchar(2))
    insert #A
    select '笔',4,'yz' union all
    select '书',5,'sf' union all
    select '笔/书',2,'sf'
    --> 测试数据:#B
    if object_id('tempdb.dbo.#B') is not null drop table #B
    go 
    create table #B([承运商] varchar(2),[商品名称] varchar(2),[数量] int,[仓库类型] int)
    insert #B
    select 'sf','笔',10,1 union all
    select 'sf','书',20,1 union all
    select 'yz','笔',22,2 union all
    select 'yz','书',13,2
    --------------开始查询--------------------------
    UPDATE B SET B.数量=B.数量+A.数量 
    FROM #A A,#B B
    WHERE A.承运商名=B.承运商 AND  CHARINDEX('/'+B.商品名称+'/','/'+A.商品名称+'/')>0select * from #B
    ----------------结果----------------------------
    /* 
    (所影响的行数为 3 行)
    (所影响的行数为 4 行)
    (所影响的行数为 3 行)承运商  商品名称 数量          仓库类型        
    ---- ---- ----------- ----------- 
    sf   笔    12          1
    sf   书    22          1
    yz   笔    26          2
    yz   书    13          2(所影响的行数为 4 行)*/]
    后面那个米看懂
      

  3.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-19 22:53:10
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#A
    if object_id('tempdb.dbo.#A') is not null drop table #A
    go 
    create table #A([商品名称] varchar(5),[数量] int,[承运商名] varchar(2))
    insert #A
    select '笔',4,'yz' union all
    select '书',5,'sf' union all
    select '笔/书',2,'sf'
    --> 测试数据:#B
    if object_id('tempdb.dbo.#B') is not null drop table #B
    go 
    create table #B([承运商] varchar(2),[商品名称] varchar(2),[数量] int,[仓库类型] int)
    insert #B
    select 'sf','笔',10,1 union all
    select 'sf','书',20,1 union all
    select 'yz','笔',22,2 union all
    select 'yz','书',13,2
    --------------开始查询--------------------------
    UPDATE B SET B.数量=B.数量+T.数量
     FROM (SELECT  承运商,B.商品名称, SUM(A.数量) AS 数量
    FROM 
    #A A,#B B
    WHERE A.承运商名=B.承运商 AND  CHARINDEX('/'+B.商品名称+'/','/'+A.商品名称+'/')>0 GROUP BY B.承运商,B.商品名称) AS T , #B B WHERE T.承运商=B.承运商 AND T.商品名称=B.商品名称select * from #B
    ----------------结果----------------------------
    /* (所影响的行数为 3 行)
    (所影响的行数为 4 行)
    (所影响的行数为 3 行)承运商  商品名称 数量          仓库类型        
    ---- ---- ----------- ----------- 
    sf   笔    12          1
    sf   书    27          1
    yz   笔    26          2
    yz   书    13          2(所影响的行数为 4 行)*/这样标准点