不一样的行转列?

wxf87541163 2008-04-07 01:02:48
select * from Price

得到以下结果集
产品ID 产品名称 规格 地区 价格
1 产品1 1-1 北京 12
1 产品1 1-1 上海 13
1 产品1 1-1 广州 12
2 产品2 1-2 北京 22
2 产品2 1-2 上海 23
3 产品3 2-1 武汉 70

请问如何得到这样的结果集呢?。。

名称 产品1 产品2 产品3
规格 1-1 1-2 2-1
北京 12 22 -
上海 13 23 -
广州 12 - -
武汉 - - 70

请大家帮下忙啊!!
...全文
54 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wxf87541163 2008-04-07
谢谢 背着灵魂漫步 问题解决了
回复
fuda_1985 2008-04-07
mark
回复
pt1314917 2008-04-07

--那就:

declare @sql varchar(8000)
declare @i int
set @i=1
set @sql='select 地区[名称]'
select @sql=@sql+',[产品'+ ltrim(@i) +']=max(case 产品id when '''+ltrim(产品id)+''' then ltrim(价格) else '''' end)',@i=@i+1
from (select distinct 产品id from price )a order by 产品id
set @sql=@sql+' from price group by 地区'
declare @sql1 varchar(8000)
set @i=1
set @sql1='select ''规格''[名称]'
select @sql1=@sql1+',[产品'+ ltrim(@i) +']=max(case 产品id when '''+ltrim(产品id) +''' then 规格 else '''' end)',@i=@i+1
from (select distinct 产品id from price )a order by 产品id
set @sql1=@sql1+' from price'
exec(@sql1+' union all '+@sql)

回复
wxf87541163 2008-04-07

create table #price
(
产品ID int,
产品名称 varchar(20),
规格 varchar(20),
地区 varchar(20),
价格 decimal(10,2)
)
insert into #price (产品ID,产品名称,规格,地区,价格)values(1,'产品','1-1','上海',12)
insert into #price (产品ID,产品名称,规格,地区,价格)values(1,'产品','1-1','北京',20)
insert into #price (产品ID,产品名称,规格,地区,价格)values(1,'产品','1-1','广州',32)
insert into #price (产品ID,产品名称,规格,地区,价格)values(2,'产品','2-1','上海',14)
insert into #price (产品ID,产品名称,规格,地区,价格)values(2,'产品','2-1','北京',42)
insert into #price (产品ID,产品名称,规格,地区,价格)values(3,'产品','3-1','北京',20)
insert into #price (产品ID,产品名称,规格,地区,价格)values(3,'产品','3-1','杭州',20)
select * from #price
drop table #price


谢谢 背着灵魂漫步
你的代码可以 是我搞错了 如果产品名称是一样的就有问题 如何按产品ID来区分呢?
回复
fcuandy 2008-04-07
老板让你搞成那样,是因为他要在查询分析器上看显示结果吗?
回复
pt1314917 2008-04-07
4楼的不可以吗?
回复
wxf87541163 2008-04-07
因为要在页面上显示出来 地区会比较多 而产品不会很多 如果横向显示的话页面就会变得很宽 所有要纵向显示
请问谁有办法啊??

名称 产品1 产品2 产品3
规格 1-1 1-2 2-1
北京 12 22 -
上海 13 23 -
广州 12 - -
武汉 - - 70
回复
pt1314917 2008-04-07


declare @sql varchar(8000)
set @sql='select 地区[名称]'
select @sql=@sql+',['+ 产品名称 +']=max(case 产品名称 when '''+产品名称+''' then ltrim(价格) else '''' end)'
from (select distinct 产品名称 from price )a order by 产品名称
set @sql=@sql+' from price group by 地区'
declare @sql1 varchar(8000)
set @sql1='select ''规格''[名称]'
select @sql1=@sql1+',['+ 产品名称 +']=max(case 产品名称 when '''+产品名称+''' then 规格 else '''' end)'
from (select distinct 产品名称 from price )a order by 产品名称
set @sql1=@sql1+' from price'
exec(@sql1+' union all '+@sql)

回复
wxf87541163 2008-04-07
laowan688 说的那样的我会啊 可是我老板要我搞成这样的。。。没办法啊

金城武还是很帅的

谁有办法啊?。。。
回复
laowan688 2008-04-07
因该是这样的结果集!
名称 规格 北京 上海 广州 武汉
产品1 1-1 12 32 43 32
产品2 1-2 21 32 12 12
产品3 1-3 21 12 32 32
回复
laowan688 2008-04-07
你这个问题问的太幼稚,我只能这么说了。
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-07 01:02
社区公告
暂无公告