需求是这样的,有以下三张表商场表:store(MNO,MNAME,CITY) 各属性含义依次 为商场号、商场名和商场所在城市;主键为商场号;
商品表:gds(PNO,PNAME,CITY,COLOR)各属性含义依次为商品号、商品名、产地和 商品颜色;主键为商品号;
销售表:sale(MNO,PNO,QTY,COST,SALE)各属性含义依次为商场号、商品号、销售 数量、销售成本和销售金额;
sale表中数据如下:
MNO PNO QTY COST SALE
1101 0002 3 3.9 5.7
1101 0020 30 300 360
1101 0002 3 3.9 5.7
1102 0020 35 385 445
1103 0022 33 33 36.3
1103 0024 25 12.5 15
1104 0023 34 3400 4080问题是想做一个1101,1102门店商品销售门店对比表,要求把空值(NULL)输出 为0,报表中要包含 商品编码、商品名称、颜色、1101店(销售数量、销售成本 、销售额)、1102店(销售数量、销售成本、销售额)SQL
商品表:gds(PNO,PNAME,CITY,COLOR)各属性含义依次为商品号、商品名、产地和 商品颜色;主键为商品号;
销售表:sale(MNO,PNO,QTY,COST,SALE)各属性含义依次为商场号、商品号、销售 数量、销售成本和销售金额;
sale表中数据如下:
MNO PNO QTY COST SALE
1101 0002 3 3.9 5.7
1101 0020 30 300 360
1101 0002 3 3.9 5.7
1102 0020 35 385 445
1103 0022 33 33 36.3
1103 0024 25 12.5 15
1104 0023 34 3400 4080问题是想做一个1101,1102门店商品销售门店对比表,要求把空值(NULL)输出 为0,报表中要包含 商品编码、商品名称、颜色、1101店(销售数量、销售成本 、销售额)、1102店(销售数量、销售成本、销售额)SQL
(MNO int
,MNAME varchar(100)
,CITY varchar(100)
)
create table #gds
(PNO varchar(50)
,PNAME varchar(100)
,CITY varchar(100)
,COLOR varchar(100)
)
create table #sale
(MNO varchar(50)
,PNO varchar(50)
,QTY int
,COST decimal(18,2)
,SALE decimal(18,2)
)
insert into #sale
select '1101', '0002', 3 ,3.9 ,5.7 union all
select '1101', '0020', 30, 300, 360 union all
select '1101', '0002', 3 ,3.9 ,5.7 union all
select '1102', '0020', 35, 385, 445 union all
select '1103', '0022', 33, 33 ,36.3 union all
select '1103', '0024', 25, 12.5, 15 union all
select '1104', '0023', 34, 3400, 4080
/***************************木有汇总****************************
select a.PNO,a.MNO,
(select cast(t.QTY as varchar)+',',cast(t.COST as varchar)+',',cast(t.SALE as varchar)+','
from #sale t
where t.MNO=a.MNO and t.PNO=a.PNO
for XML path(''))as 'Sumary'
into #X
from #sale a*************************************************************//****************************汇总后的*****************************/
select a.PNO,a.MNO,
(select cast(sum(t.QTY) as varchar)+',',cast(sum(t.COST) as varchar)+',',cast(sum(t.SALE) as varchar)+','
from #sale t
where t.MNO=a.MNO and t.PNO=a.PNO
group by t.PNO,t.MNO
for XML path(''))as 'Sumary'
into #X
from #sale a
group by a.PNO,a.MNO
Declare @SqlStr nvarchar(max)
set @SqlStr= 'select x.PNO,g.PNAME,g.COLOR'
select @SqlStr+=',case MNO when '''+z.MNO+''' then x.Sumary else ''0,0,0'' end as '''+z.MNO+'(QTY,Cost,Sale)'' '
from (select distinct MNO from #sale )z
set @SqlStr +='from #x x left join #gds g on g.PNO=x.PNO order by x.PNO'--select @SqlStr
exec(@SqlStr)
drop table #gds
drop table #sale
drop table #store
drop table #X