Перемещение результатов сложного запроса в таблицу - PullRequest
1 голос
/ 04 мая 2019

У меня сложный запрос, который нельзя сохранить как представление из-за операторов DECLARE в начале запроса.

Я хотел бы сохранить результаты запроса в таблице.

Я попытался вставить следующий оператор, чтобы охватить весь запрос, а также только вокруг SET @sql и EXEC(@sql).

Обе вызвали ошибки, которые я не смог устранить.

Это запрос, который выдает нужные мне результаты:

DECLARE @sql VARCHAR(MAX)
DECLARE @colList VARCHAR(MAX)

--create dynamic list of columns
SELECT @colList = STUFF((SELECT + ',' + QUOTENAME(colName +  CAST(CAST(Billing_Order AS INTEGER) AS VARCHAR))
                         FROM Credible_Client_Insurance_Raw_Data
                         CROSS APPLY
                             (SELECT 1 As Ord, 'Payer_ID' ColName 
                              UNION ALL
                              SELECT 2 As Ord, 'Billing_Order' 
                              UNION ALL
                              SELECT 3 As Ord, 'Insurance_ID' 
                              UNION ALL
                              SELECT 4 As Ord, 'Group_No' 
                              UNION ALL
                              SELECT 5 As Ord, 'Copay_Fee' 
                              UNION ALL
                              SELECT 6 As Ord, 'Start_Date') v 
                          GROUP BY colName, Ord, CAST(CAST(Billing_Order AS INTEGER) AS VARCHAR)
                          ORDER BY CAST(CAST(Billing_Order AS INTEGER) AS VARCHAR), Ord
                          FOR XML PAT(''), TYPE).value('/', 'VARCHAR(MAX)'), 1, 1, '')

--unpivot columns into rows and then apply pivot
SET @sql = 'SELECT Client_ID, ' + @colList + ' 
            FROM 
                (SELECT  
                     Client_ID, ColVal,
                     colName + CAST(CAST(Billing_Order AS INTEGER) AS VARCHAR) ColName
                 FROM Credible_Client_Insurance_Raw_Data
                 CROSS APPLY
   (
     SELECT Payer_ID As ColVal, ''Payer_ID'' ColName UNION ALL
     SELECT Billing_Order, ''Billing_Order'' UNION ALL
     SELECT Insurance_ID, ''Insurance_ID'' UNION ALL
     SELECT Group_No, ''Group_No'' UNION ALL
     SELECT CAST(Copay_Fee AS VARCHAR), ''Copay_Fee'' UNION ALL
     SELECT CAST(Start_Date AS VARCHAR), ''Start_Date'' 
   ) v 
) A
PIVOT
(
   MAX(ColVal) FOR ColName IN (' + @colList + ')
) P1 '


EXEC(@sql)

Я просто хочу ВСТАВИТЬ результат запросаустановить в постоянную таблицу Credible_Client_Insurance_Data.

Есть ли способ по существу выполнить

INSERT INTO Credible_Client_Insurance_Data (Client_ID, etc.)
    SELECT Client_ID, etc.
    FROM query_results  

Или какой-то тип данных, вставленный в таблицу?

1 Ответ

0 голосов
/ 04 мая 2019

ЕСЛИ Я правильно понимаю, вам не нужно просто изменить значение @sql на:

SET @sql = '
INSERT INTO Credible_Client_Insurance_Data (' + @colList + ')
SELECT Client_ID, ' + @colList + ' 
FROM
(
   SELECT Client_ID, ColVal,
   colName +  CAST(CAST(Billing_Order AS INTEGER) AS VARCHAR) ColName
   FROM Credible_Client_Insurance_Raw_Data
   CROSS APPLY
   (
     SELECT Payer_ID As ColVal, ''Payer_ID'' ColName UNION ALL
     SELECT Billing_Order, ''Billing_Order'' UNION ALL
     SELECT Insurance_ID, ''Insurance_ID'' UNION ALL
     SELECT Group_No, ''Group_No'' UNION ALL
     SELECT CAST(Copay_Fee AS VARCHAR), ''Copay_Fee'' UNION ALL
     SELECT CAST(Start_Date AS VARCHAR), ''Start_Date'' 
   ) v 
) A
PIVOT
(
   MAX(ColVal) FOR ColName IN (' + @colList + ')
) P1 ;';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...