首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求写一个SQL的存储过程,该如何处理

2013-07-21 
求写一个SQL的存储过程我现在遇到一个很晕的统计,如下:有三个表,表1、表2、表3,就是有个区域表(表3),这两个

求写一个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
求写一个SQL的存储过程,该如何处理

--表五
select *,p.树+p.汽车+p.自行车 as 总计
from
(
select QY,SP from a4
) as p
pivot(count(SP) for SP in(汽车,树,自行车)) as p

求写一个SQL的存储过程,该如何处理

热点排行