不一样的行转列?

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

请大家帮下忙啊!!
...全文
101 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
你这个问题问的太幼稚,我只能这么说了。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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