Объявите переменную таблицы со столбцами, такими же, как строка во второй таблице - PullRequest
0 голосов
/ 16 мая 2019

У меня есть таблица с идентификатором в базе данных.Я хочу объявить переменную таблицы со столбцами столько же, сколько количество идентификаторов в таблице идентификаторов (сейчас их 16, но в будущем будет больше).

enter image description here

Имя столбца должно быть идентификатором.

enter image description here

Я пытался использовать table_cursor и динамический запрос с созданием табличной переменной.И это сработало, но в будущем это вызвало много неприятностей.Можно ли создать табличную переменную без динамического запроса?

1 Ответ

1 голос
/ 16 мая 2019

Попробуйте это

IF OBJECT_ID('dbo.TempTable') IS NOT NULL
DROP TABLE TempTable
CREATE TABLE TempTable (Id INT IDENTITY,
                        Status_name varchar(30),
                        [Count] INT
                        )
INSERT INTO TempTable(Status_name,[Count])
SELECT 'in_Work'    , 28 UNION ALL
SELECT 'in_reserve' , 44 UNION ALL
SELECT 'Planned_Stop'   , 78 UNION ALL
SELECT '_empty' , 55 UNION ALL
SELECT 'Waiting'    , 43 

DECLARE @Sql nvarchar(max),
        @DynamicColumn nvarchar(max),
        @MaxDynamicColumn nvarchar(max)

SELECT @DynamicColumn = STUFF((SELECT DISTINCT', '+QUOTENAME(CAST(Id AS VARCHAR(10)))
FROM TempTable  FOR XML PATH ('')),1,1,'') 

SELECT @MaxDynamicColumn = STUFF((SELECT DISTINCT', '+'MAX('+QUOTENAME(CAST(Id AS VARCHAR(10)))+') AS '+QUOTENAME('_'+CAST(Id AS VARCHAR(10)))
FROM TempTable  FOR XML PATH ('')),1,1,'') 

SET @Sql='SELECT  '+ @MaxDynamicColumn+'
            FROM
            (
            SELECT *
            FROM TempTable o
            )AS src
            PIVOT 
            (
            MAX([Count]) FOR [Id] IN ('+@DynamicColumn+')
            ) AS Pvt
            '
EXEC (@Sql)
PRINT @Sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...