sqlserver2005 行列转换实现方法


复制代码 代码如下:

--Create Company Table
Create Table Company
(
ComID varchar(50) primary key,
ComName nvarchar(50) not null,
ComNumber varchar(50) not null,
ComAddress nvarchar(200),
ComTele varchar(50)
)
--Create Product Table
Create Table Product
(
ProductID varchar(50) primary key,
ComID varchar(50) not null,
ProName nvarchar(200) not null,
ProNumber int not null
)
select * from product
--insert into table value
insert Company select(58C0F3FD-7B98-4E74-A1A8-7B144FCB8707,CompanyOne,SH19991028,ShangHai,98765432112)
union all select(768B2E84-0AAB-4653-8F5B-5EF6165204DB,CompanyTwo,SH19991028,ShangHai,98765432113)
union all select(AAE86C36-C82B-421D-BC55-E72368B1DE00,CompanyThree,SH19991028,ShangHai,98765432114)
union all select(C672B359-C800-47DE-9BB4-6D0FC614594C,CompanyFour,SH19991028,ShangHai,98765432115)
union all select(FDBA8B3F-1851-4B73-9A20-A24AEF721AAE,CompanyFive,SH19991028,ShangHai,98765432116)
insert Product sleect(1598A60B-FCFD-4269-864B-CB999E8EA5CA,AAE86C36-C82B-421D-BC55-E72368B1DE00,SqlServer2005,500)
union all select(19D7BF2F-79FD-414E-B648-F105D4AB1EBB    ,AAE86C36-C82B-421D-BC55-E72368B1DE00,    Office,    400)
union all select(232B6109-C575-4316-A9BD-0C58F737BE7B    ,FDBA8B3F-1851-4B73-9A20-A24AEF721AAE,    SqlServer2005    ,200)
union all select(4F30E12C-7654-40CC-8245-DF1C3453FBC5    ,768B2E84-0AAB-4653-8F5B-5EF6165204DB,    Office,    400)
union all select(54C6E4C2-1588-43DF-B22C-0697A1E27DB0    ,58C0F3FD-7B98-4E74-A1A8-7B144FCB8707,    Office,    400)
union all select(551EB6CA-3619-4250-98A0-7231BB4C3D58    ,FDBA8B3F-1851-4B73-9A20-A24AEF721AAE,    SqlServer2000,    100)
union all select(5BAD331C-B6E4-440E-AC54-52CE13166843    ,768B2E84-0AAB-4653-8F5B-5EF6165204DB,    SqlServer2005,    1000)
union all select(5C039C53-2EE4-4D90-BA78-7A20CEC4935C    ,58C0F3FD-7B98-4E74-A1A8-7B144FCB8707,    Windows2000,    200)
union all select(673A8683-CD03-40D2-9DB1-1ADA812016E2    ,58C0F3FD-7B98-4E74-A1A8-7B144FCB8707,    WindowsXP,    100)
union all select(6B9F771B-46EA-4496-B1DA-F10CB53F6F62    ,C672B359-C800-47DE-9BB4-6D0FC614594C,    WindowsXP,    100)
union all select(770089B1-A80A-4F48-8537-E15BD00A99E7    ,AAE86C36-C82B-421D-BC55-E72368B1DE00,    WindowsXP,    100)
union all select(92EED635-5C61-468A-B19D-01AAC112D8A3    ,FDBA8B3F-1851-4B73-9A20-A24AEF721AAE,    SysBase,    100)
union all select(99195297-F7F0-4DCD-964E-CFB8A162B6D0    ,768B2E84-0AAB-4653-8F5B-5EF6165204DB,    Windows2008,    300)
union all select(9EF017C1-F8F0-49BC-A7BD-4DFFB6EA8037    ,768B2E84-0AAB-4653-8F5B-5EF6165204DB,    Windows2000,    200)
union all select(A31BCD44-7856-461F-A0FD-407DCA96E8A9    ,C672B359-C800-47DE-9BB4-6D0FC614594C,    SqlServer2005,    100)
union all select(A9B52E8F-129F-4113-A473-D4BDD2B3C09C    ,768B2E84-0AAB-4653-8F5B-5EF6165204DB,    WindowsXP    ,100)
union all select(AC228CA0-490C-4B3D-866D-154E771B2083    ,58C0F3FD-7B98-4E74-A1A8-7B144FCB8707,    Windows2008,    300)
union all select(BD0BA1D3-D1D2-4BC7-9EFD-78B1165060A0    ,FDBA8B3F-1851-4B73-9A20-A24AEF721AAE,    DB2,    200)
union all select(CAA71AEA-7130-4AB8-955E-B04EA35A178A    ,FDBA8B3F-1851-4B73-9A20-A24AEF721AAE,    Oracle,    100)
--This is Business pack .
--Using this function can using tables row
--to new tables column
declare @strSql varchar(1000)
declare @column varchar(50)
declare @columns varchar(200)
set @columns =
/*According to Cursor get new table column*/
declare varchar_cur cursor for
select distinct proname from product order by proname
open varchar_cur
fetch next from varchar_cur into @column
while @@fetch_status = 0
begin
set @columns = @columns + [ + @column + ],
fetch next from varchar_cur into @column
end
Close varchar_cur
Deallocate varchar_cur
/*Converted to the ranks of the use of pivot*/
set @columns = stuff(@columns,len(@columns),1,)
set @strSql = select comname, + @columns
set @strSql = @strSql + from
set @strSql = @strSql + (
set @strSql = @strSql + select comname,pronumber,proname from product
set @strSql = @strSql + left join company on product.comid = company.comid
set @strSql = @strSql + ) as temp
set @strSql = @strSql + pivot
set @strSql = @strSql + (
set @strSql = @strSql + sum(pronumber)
set @strSql = @strSql + for proname in ( + @columns + )
set @strSql = @strSql + ) as Pivot_table
exec(@strSql)