У меня сложный запрос, который нельзя сохранить как представление из-за операторов 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
Или какой-то тип данных, вставленный в таблицу?