Rows to Columns SQL Server



我目前正在尝试将MS SQL数据库中的行表转换为列视图。我的数据目前在一个这样的表格中:

ID  OID  Field                                 DataType   Value   Archived
==  ===  ====================================  ========   =====  =========
1   13   E21FC1EC-A6D9-43E2-8C8E-0F2935A7EF68  string     Hello  0
2   13   6BBDE7FA-6F7A-4319-899B-2DF0E6610FA9  string     World  1
3   13   91BB8616-43CD-48EC-97CD-5813B67770ED  int        1      0
4   13   A98D43C3-0A9C-4173-8ECE-29AAAE1D973E  int        2      1
5   13   92BB0DFF-EEAF-4A07-A65A-C3A1E1220F60  boolean    true   0
6   13   1AEE3D08-5F09-4A18-80AC-344E03F6AD7B  boolean    false  0

我的结果集应该为每个唯一的OID包含一行,并为上表中的每个字段包含一列。值列应为单元格值。一个例子是:(我在这个例子中减少了列的数量):

OID E21FC1EC-A6D9-43E2-8C8E-0F2935A7EF68 6BBDE7FA-6F7A-4319-899B-2DF0E6610FA9 91BB8616-43CD-48EC-97CD-5813B67770ED 
=== ==================================== ==================================== ====================================
13  Hello                                World                                1

我尝试过各种方法,包括CASE、PIVOTS等,但我不太清楚。任何解决方案都应该与SQLServer2005+配合使用。

如有任何帮助,我们将不胜感激。

提前感谢

David

我在这里写了一个动态数据透视的好例子:

创建表[dbo]。[UserDetail]([PK_User][bigint]NOT NULL,[FK_Property][int]NOT NULL,[PropValue]varchar NOT NULL)关于[初级]

转到插入[dbo]。[UserDetail]([PK_User]、[FK_Property]、[PropValue])值(1,1,N'Jitendra')插入[dbo]。[UserDetail]([PK_User],[FK_Property],[PropValue])值(1,2,N'Garg')插入[dbo]。[UserDetail]([PK_User],[FK_Property],[PropValue])VALUES(2,1,N'Praveen')插入[dbo]。[UserDetail]([PK_User]、[FK_Property],[PropValue])值(2,2,N'Mehta')插入[dbo]。[用户详细信息]([PK_User],[FK_Property],[PropValue])值(2,3,N'Udaipur')

转到

ALTER PROCEDURE[dbo]。[usp_Pivot](@UserId作为INT)作为声明@查询为VARCHAR(MAX)

在StrColumn上声明为VARCHAR(MAX)="SELECT@StrColumn=CASE@StrColumn WHEN"THEN"ELSE@StrColumn+","END+"ISNULL(["+CAST(FK_Property AS VARCHAR(10))+'],'''')AS Col'+CAST(FK_PPropertyAS VARCHAR(10))。UserDetail(NoLock)WHERE PK_User=@UserId

将StrIn声明为VARCHAR(最大值)="SELECT@StrIn=CASE@StrIn WHEN'THEN'ELSE@StrIn+','END+'['+CAST(FK_Property ASVARCHAR(10))+']'来自dbo。UserDetail(NoLock)WHERE PK_User=@UserId

SET@Query='SELECT*FROM(SELECT PK_User As UserId,'+@StrColumn+'FROM(SELECT PK_User,FK_Property,PropValue自dbo。UserDetail(NoLock)WHERE PK_User='+CAST(@UserId ASVARCHAR(10))+')p PIVOT(FK_Property IN的最大(PropValue)('+@StrIn+'))AS pvt)X'

打印@Query EXEC(@Query)GO

您可以根据自己的要求对此进行修改。。。。。

试试这个:

http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx

相关内容

最新更新