Строки в столбцы SQL Server - PullRequest
0 голосов
/ 20 марта 2012

В настоящее время я пытаюсь преобразовать таблицу строк в представление столбцов в базе данных 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 и т. Д., Но я не могу понять это. Любое решение должно работать с SQL Server 2005 +.

Любая помощь будет принята с благодарностью.

Заранее спасибо,

David

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Я пишу здесь хороший пример динамического поворота:

CREATE TABLE [dbo]. [UserDetail] ([PK_User] [bigint] NOT NULL, [FK_Property] [int] NOT NULL, [PropValue] varchar NOT NULL) ON [PRIMARY]

GO INSERT [dbo]. [UserDetail] ([PK_User], [FK_Property], [PropValue]) VALUES (1, 1, N'Jitendra ')) INSERT [dbo]. [UserDetail] ([PK_User], [FK_Property], [PropValue]) VALUES (1, 2, N'Garg ') INSERT [dbo]. [UserDetail] ([PK_User], [FK_Property],[PropValue]) VALUES (2, 1, N'Praveen ') INSERT [dbo]. [UserDetail] ([PK_User], [FK_Property], [PropValue]) VALUES (2, 2, N'Mehta') INSERT [dbo]. [UserDetail] ([PK_User], [FK_Property], [PropValue]) VALUES (2, 3, N'Udaipur ')

GO

ALTER PROCEDURE [dbo]. [Usp_Pivot] (@UserId As INT) как DECLARE @Query As VARCHAR (MAX)

DECLARE @StrColumn As VARCHAR (MAX) = '' SELECT @StrColumn = CASE @StrColumn WHEN '' THEN '' ELSE @StrColumn +',' END + 'ISNULL ([' + CAST (FK_Property AS VARCHAR (10)) + '],' '' ') AS Col' + CAST(FK_Property AS VARCHAR (10)) FROM dbo.UserDetail (NoLock) WHERE PK_User = @ UserId

ОБЪЯВЛЯТЬ @StrIn As VARCHAR (MAX) = 'SELECT @StrIn = CASE @StrIn КОГДА' 'THEN' 'ELSE @StrIn + ',' END + '[' + CAST (FK_Property AS VARCHAR (10)) + ']' FROM dbo.UserDetail (NoLock) WHERE PK_User = @ UserId

SET @Query = 'SELECT *FROM (ВЫБЕРИТЕ PK_User As UserId, '+ @StrColumn +' ОТ (ВЫБЕРИТЕ PK_User, FK_Property, PropValue FROM dbo.UserDetail (NoLock) ГДЕ PK_User = '+ CAST (@UserId AS VARCHAR (10)) +') p PIVOT (MAX(PropValue) FOR FK_Property IN ('+ @StrIn +')) AS pvt) X '

PRINT @Query EXEC (@Query) GO

Вы можете изменить это согласноваше требование .....

0 голосов
/ 20 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...