SQL查询语句求高手帮忙!谢谢

a9393047839 2013-06-28 12:46:50
需求是这样的,有以下三张表商场表: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店(销售数量、销售成本、销售额)
...全文
327 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
偶麦嘎 2013-06-28
  • 打赏
  • 举报
回复
FYI

create table #store
(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
a9393047839 2013-06-28
  • 打赏
  • 举报
回复
希望结果是这样
编码 名称 颜色 1101店(销售数量、销售成本 、销售额) 1102店(销售数量、销售成本 、销售额)
0002 黄金项链 黄色 3、3.9、5.7 0、0、0
0020 男士休闲裤 灰色 30、300、360 35、385、445
IEEE_China 2013-06-28
  • 打赏
  • 举报
回复
把想要的结果,做个示例出来。 你的最后一段话,越看越糊涂。 你就2个门店?还是很多门店都弄一行显示? 你要的结果是汇总,还是??? 请把问题描述清楚吧。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧