求写一个SQL的存储过程
我现在遇到一个很晕的统计,如下: 有三个表,表1、表2、表3,就是有个区域表(表3),这两个区域包含着多个公司,其中公司可在不同区域下的。每个公司买商品,表1是销售记录表。 我最终是要出表5的统计的,我想我就应该写查出表4的结构嘛,结果我连这个也查不出来。~ 请高手帮忙写一下~
表1
BH SP GSBH
001 汽车 001
002 树 001
003 汽车 002
004 自行车 002
005 汽车 003
006 汽车 001
表2
BH GS
001 公司1
002 公司2
003 公司3
表3
BH QY GSBH
001 区域1 001,002
002 区域2 001,003
表4
BH SP GSBH GS QY
001 汽车 001 公司1 区域1
002 树 001 公司1 区域1
003 汽车 002 公司2 区域1
004 自行车 002 公司2 区域1
006 汽车 001 公司1 区域1
001 汽车 001 公司1 区域2
002 树 001 公司1 区域2
005 汽车 003 公司3 区域2
006 汽车 001 公司1 区域2
最终想要的统计
表5
QY 汽车 树 自行车 合计
区域1 3 1 1 5
区域2 3 1 0 4 存储 sql
[解决办法]
你的表三可以通过下面的语句分离开,不过没看明白跟其他表的关系
select BH,QY,b.GSBH
from (
select BH,QY,convert(xml,'<row><b>'+rtrim(replace(GSBH,',','</b><b>'))+'</b></row>')GSBH from tb)a
outer apply (select C.v.value('.','nvarchar(100)')GSBH from a.GSBH.nodes('/row/b')C(v))b
[解决办法]
--表一
if object_id('a1','u') is not null
drop table a1
create table a1
( BH varchar(10),SP varchar(20),GSBH varchar(10))
insert into a1 select '001','汽车','001' union all select '002','树','001' union all
select '003','汽车','002' union all select '004','自行车','002' union all
select '005','汽车','003' union all select '006','汽车','001'
--表二
if object_id('a2','u') is not null
drop table a2
create table a2
(BH varchar(10),GS varchar(20))
insert into a2 select '001','公司1' union all select '002','公司2' union all
select '003','公司3'
--表三
if object_id('a3','u') is not null
drop table a3
create table a3
(BH varchar(10),QY varchar(20),GSBH varchar(20))
insert into a3 select '001','区域1','001,002' union all select '002','区域2','001,003'
--表四
if object_id('a4','u') is not null
drop table a4
select a.BH,a.SP,a.GSBH,b.GS,c.QY
into a4 from a1 as a,a2 as b,a3 as c
where (a.GSBH = b.BH and b.BH = substring(c.GSBH,0,charindex(',',c.GSBH)))
or (a.GSBH = b.BH and b.BH = substring(c.GSBH,charindex(',',c.GSBH)+1,len(c.GSBH)-charindex(',',c.GSBH)))
select * from a4
--表五
select *,p.树+p.汽车+p.自行车 as 总计
from
(
select QY,SP from a4
) as p
pivot(count(SP) for SP in(汽车,树,自行车)) as p