数据表:
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表里加全就解决了,偏不加.还要出来.
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表里加全就解决了,偏不加.还要出来.
A店, 空调, B经销商没有 洗衣机 的经销商,依照什么来决定用哪个记录的经销商呢? 为什么选 B经销商 而不是 A经销商 ?依照什么次序?
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='空调'))
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
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