数据表:
dict_shop_prod 字段 shopname,product,saler
                    A店,     冰箱,   A经销商
                    A店,     空调,   B经销商
                    B店,     空调,   C经销商    
tbl_prod_sale  字段 date,shopname,product,amount....
          (1)        2010-01-01,A店,冰箱,     10
          (2)        2010-01-03,A店,洗衣机,   20
          (3)        2010-01-03,B店,空调,     10
                  .....dict_shop_prod是基础表,每个商店每个产品都有不同的经销商
tbl_prod_sale  记录产品销售情况现在要统计,每个店分产品的汇总,如果dict_shop_prod表里没有的产品,比方dict_prod_sale表里的第(2)条记录,A店买了洗衣机,找不到洗衣机的经销商,那就按一个优先顺序来确定,没洗衣机就找空调的经销商(B经销商),没有空调就把冰箱的经销商做为洗衣机的经销商最终查出来的结果就是:
 2010-01-01,A店, A经销商, 冰箱,     10
 2010-01-03,A店, B经销商,洗衣机,  20
 2010-01-03,B店,  C经销商  空调,     10最终是在汇总统计的,为了大家一目了然,表结构做了大大的减化.请问大家,这该如何写sql呀?有没有这样的语句select a.shopname,a.product,b.saler,a.amount
from dict_shop_prod as b,tbl_prod_sale as b
where  a.shopname=b.shopname and (如果有此产品 a.product=b.product   如果没此产品  不会写了...难缠的客户,dict_shop_prod表里加全就解决了,偏不加.还要出来.  
 

解决方案 »

  1.   

        (2)    2010-01-03,A店,洗衣机,   20          A店,   冰箱,   A经销商
              A店,   空调,   B经销商没有 洗衣机 的经销商,依照什么来决定用哪个记录的经销商呢? 为什么选 B经销商 而不是 A经销商 ?依照什么次序?
      

  2.   

    select B.*,A.saler
    from dict_shop_prod as A,tbl_prod_sale as b 
    where  a.shopname=b.shopname and (a.product=b.product
    OR
    (A.product='空调' AND B.product='洗衣机')
    OR
    (A.product='洗衣机' AND B.product='空调'))
      

  3.   


    if object_id('tempdb.dbo.#TA') is not null drop table #TA
    go 
    create table #TA( shopname varchar(6),product varchar(10),saler varchar(10))
    insert #TA
    select  'A店',  '冰箱',  'A经销商' union all
    select  'A店',  '空调',  'B经销商' union all
    select  'B店',  '空调',  'C经销商' if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB( date smalldatetime,shopname varchar(6),product varchar(8),amout int)
    insert #TB
    select  '2010-01-01','A店','冰箱',     10  union all
    select  '2010-01-03','A店','洗衣机',   20  union all
    select  '2010-01-03','B店','空调',     10
     
    select  date,#TB.shopname,saler,#TB.product,amout
    from #TB left join #TA 
    on #TA.shopname=#TB.shopname and (#TA.product=#TB.product or (#TA.product='空调' AND #TB.product='洗衣机'))
    from #TA , #TB
    where #TA.shopname=#TB.shopname 
    and
     (#TA.product=#TB.product 
    OR 
     (#TA.product='空调' AND #TB.product='洗衣机') 
    OR 
     (#TA.product='洗衣机' AND #TB.product='空调'))

    --其中红色和蓝色任意用一个就行了date                 shopname   saler  product amout
    2010-01-01 00:00:00 A店 A经销商 冰箱 10
    2010-01-03 00:00:00 A店 B经销商 洗衣机 20
    2010-01-03 00:00:00 B店 C经销商 空调 10
      

  4.   

    if object_id('tempdb.dbo.#TA') is not null drop table #TA
    go 
    create table #TA( shopname varchar(6),product varchar(10),saler varchar(10))
    insert #TA
    select  'A店',  '冰箱',  'A经销商' union all
    select  'A店',  '空调',  'B经销商' union all
    select  'B店',  '空调',  'C经销商' if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB( date smalldatetime,shopname varchar(6),product varchar(8),amout int)
    insert #TB
    select  '2010-01-01','A店','冰箱',     10  union all
    select  '2010-01-03','A店','洗衣机',   20  union all
    select  '2010-01-03','B店','空调',     10
     
    select  date,#TB.shopname,saler,#TB.product,amout
    from #TB left join #TA 
    on #TA.shopname=#TB.shopname and (#TA.product=#TB.product or (#TA.product='空调' AND #TB.product='洗衣机'))
    --from #TA , #TB
    --where #TA.shopname=#TB.shopname 
    --and
    -- (#TA.product=#TB.product 
    --OR 
    -- (#TA.product='空调' AND #TB.product='洗衣机') 
    --OR 
    -- (#TA.product='洗衣机' AND #TB.product='空调'))--其中from及以后语句 也 可用注释语句代替------------------运行结果-------------------------------
    date                 shopname   saler  product amout
    2010-01-01 00:00:00    A店    A经销商    冰箱    10
    2010-01-03 00:00:00    A店    B经销商    洗衣机    20
    2010-01-03 00:00:00    B店    C经销商    空调    10