SQL2005竖横表处理难题,请出手
SQL2005竖横表处理难题,请大虾出手!
请问SQL2005数据库如何把1源表处理成2一样的结果?谢谢!
例子如下:
1、源表
项目 产品 价格 (注:项目是动态变的可能有多项,比如有20个广东)
------------------
广东 a 1
广东 b 3
广东 c 10
广西 a 5
中国 f 9
中国 g 8
2、处理后的结果
项目 产品 价格 产品 价格 产品 价格
-----------------------------------------------
广东 a 1 b 3 c 10
广西 a 5
中国 f 9 g 8
------解决方案--------------------
------解决方案--------------------
这么久都没人回答 逆天了
------解决方案--------------------
请问SQL2005数据库如何把1源表处理成2一样的结果?谢谢!
例子如下:
1、源表
项目 产品 价格 (注:项目是动态变的可能有多项,比如有20个广东)
------------------
广东 a 1
广东 b 3
广东 c 10
广西 a 5
中国 f 9
中国 g 8
2、处理后的结果
项目 产品 价格 产品 价格 产品 价格
-----------------------------------------------
广东 a 1 b 3 c 10
广西 a 5
中国 f 9 g 8
SQL 竖横表处理
------解决方案--------------------
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2013-11-22 15:21:03
-- Verstion:
-- Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
-- Feb 10 2012 19:39:15
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([项目] varchar(4),[产品] varchar(1),[价格] int)
insert [tb]
select '广东','a',1 union all
select '广东','b',3 union all
select '广东','c',10 union all
select '广西','a',5 union ALL
select '中国','f',9 union all
select '中国','g',8
--------------开始查询--------------------------
--declare @s nvarchar(4000)
--set @s=''
--Select @s=@s+',''产品''=max(case when [px]='+quotename([px],'''')+' then [产品] else '''' end),''价格''=max(case when [px]='+quotename([px],'''')+' then [价格] else '''' end)'
--from (SELECT px=ROW_NUMBER()OVER(PARTITION BY 项目 ORDER BY GETDATE()),产品,价格 FROM tb )AS a group BY a.px,产品,价格
--exec('select [项目]'+@s+' from (SELECT px=ROW_NUMBER()OVER(PARTITION BY 项目 ORDER BY GETDATE()),* FROM tb )AS a group by [项目]')
declare @sql varchar(8000)
set @sql = 'select 项目 '
select @sql = @sql + ' , max(case px when ''' + LTRIM(px) + ''' then 产品 else '''' end) as 产品,max(case px when ''' + LTRIM(px) + ''' then 价格 else '''' end) as 价格'
from (select distinct px from (SELECT px=ROW_NUMBER()OVER(PARTITION BY 项目 ORDER BY GETDATE()),* FROM tb )AS a ) as a
set @sql = @sql + ' from (SELECT px=ROW_NUMBER()OVER(PARTITION BY 项目 ORDER BY GETDATE()),* FROM tb )AS a group by 项目'
exec(@sql)
----------------结果----------------------------
/* 项目 产品 价格 产品 价格 产品 价格
---- ---- ----------- ---- ----------- ---- -----------
广东 a 1 b 3 c 10
广西 a 5 0 0
中国 f 9 g 8 0
(3 行受影响)
*/
------解决方案--------------------
这么久都没人回答 逆天了
------解决方案--------------------
if object_id('tab') is not null drop table tab