Как сослаться на члена индексатора класса в комментариях C#

Здесь вы можете найти статический пример и пример с использованием динамических операторов T-SQL:

--DROP TABLE IF EXISTS [dbo].[DataSource]; 

CREATE TABLE [dbo].[DataSource]
(
    [VISIT_ID] INT
   ,[Parameter1] TINYINT
   ,[Parameter2] TINYINT
   ,[Parameter3] TINYINT
);

INSERT INTO [dbo].[DataSource] ([VISIT_ID], [Parameter1], [Parameter2], [Parameter3])
VALUES (100, 1, 2, 1)
      ,(101, 4, 2, 1)
      ,(102, 2, 2, 0);

-- static

SELECT *
FROM [dbo].[DataSource]
UNPIVOT
(
    [value] FOR [column] IN ([Parameter1], [Parameter2], [Parameter3])
) UNPVT
PIVOT
(
    MAX([value]) FOR [VISIT_ID] IN ([100], [101], [102])
) PVT;

--- danymic

DECLARE @DynamicTSQLStatement NVARCHAR(MAX)
       ,@DynamicColumnsP NVARCHAR(MAX)
       ,@DynamicColumnsU NVARCHAR(MAX);

SET @DynamicColumnsP = STUFF
                        (
                            (
                                SELECT ',[' + [name] + ']'
                                FROM [sys].[columns]
                                WHERE [name] LIKE 'Parameter%'
                                    AND [object_id] = OBJECT_ID('[dbo].[DataSource]')
                                ORDER BY [name]
                                FOR XML PATH('') ,TYPE
                            ).value('.', 'NVARCHAR(MAX)')
                            ,1
                            ,1
                            ,''
                        );

SET @DynamicColumnsU = STUFF
                        (
                            (
                                SELECT ',[' + CAST([VISIT_ID] AS VARCHAR(12)) + ']'
                                FROM [dbo].[DataSource]                             
                                ORDER BY [VISIT_ID]
                                FOR XML PATH('') ,TYPE
                            ).value('.', 'NVARCHAR(MAX)')
                            ,1
                            ,1
                            ,''
                        );

SET @DynamicTSQLStatement = N'
SELECT *
FROM [dbo].[DataSource]
UNPIVOT
(
    [value] FOR [column] IN (' + @DynamicColumnsP + ')
) UNPVT
PIVOT
(
    MAX([value]) FOR [VISIT_ID] IN (' + @DynamicColumnsU + ')
) PVT;';

EXEC sp_executesql @DynamicTSQLStatement;
10
задан Auron 4 December 2008 в 16:02
поделиться