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
Вы можете изменить это согласноваше требование .....