Вставить в таблицу из запроса с CTE и Pivot - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть запрос, который возвращает результаты в сводном формате. Я хочу вставить его в таблицу SQL. В конечном итоге я создам задание агента, которое запускается в 10 вечера каждую ночь и вставляет записи в таблицу. Я могу найти примеры, когда люди использовали CTE, а затем результаты CTE в таблице, но мы стали более сложными, так как я изменил результаты.

Может кто-нибудь помочь мне?

ниже приведен скрипт

WITH CTE as 

(SELECT

org.StudioMain,
BUD.ForecastProbability as 'Prob%',
(BUD.ForecastProbability*BUD.AmountOrgCurrency) as ForecastAmountOrg,
(BUD.ForecastProbability*CASE
WHEN org.EntityCode = 'WAU' AND org.Studio = 'Sydney' THEN 
BUD.AmountOrgCurrency/NULLIF(bud.ForecastCurrencyToNZDfx,0)
WHEN org.EntityCode = 'WAU' AND org.Studio = 'Melbourne' THEN 
BUD.AmountOrgCurrency/NULLIF(bud.ForecastCurrencyToNZDfx,0)
else BUD.AmountOrgCurrency
end) as ForecastAmountNZD


FROM EDWH.dbo.FactBudgets AS BUD
INNER JOIN [ODS].[dbo].[PeriodTriggerMain] as T ON BUD.BudgetName = T.BudgetName
LEFT JOIN EDWH.dbo.DimOrg as Org on BUD.DimOrgKey = org.DimOrgKey
LEFT JOIN ODS.dbo.DimFinPeriodDate as Period on BUD.DimFinPeriodDateKey = Period.DimFinPeriodDateKey
LEFT JOIN (SELECT DISTINCT WBS1, ProjectName, Principal, Sector FROM EDWH.dbo.DimProject where WBS2 = 
'') as PRN ON BUD.WBS1 = PRN.WBS1


WHERE 
CONVERT(varchar(10),dateadd(day,0,dateadd(month,datediff(month,0,dateadd(month, 3, 
datefromparts(left(BUD.FinPeriod, 4)-1, right(BUD.FinPeriod, 2), 1))),0)),120) BETWEEN
CONVERT(varchar(10),dateadd(day,0,dateadd(month,datediff(month,0,dateadd(month, 3, 
datefromparts(left(T.ForecastPeriod, 4)-1, right(T.ForecastPeriod, 2), 1))),0)),120) AND
CONVERT(varchar(10),dateadd(day,0,dateadd(month,datediff(month,0,dateadd(month, 14, 
datefromparts(left(T.ForecastPeriod, 4)-1, right(T.ForecastPeriod, 2), 1))),0)),120) 
)
SELECT * FROM (
SELECT
StudioMain,
Currency = 'NZD',
SUM(ForecastAmountNZD) as AmountNZD,
getdate() as Timestamp

FROM CTE as f

GROUP BY
StudioMain
) as NZD

PIVOT(
SUM(AmountNZD)
FOR [StudioMain] IN  
([AKL], [CHC], [MEL], [QNT], [SYD], [WEL], [WMT])
)
AS Pivot_Table

UNION ALL

SELECT * FROM (
SELECT
StudioMain,
Currency = 'ORG',
SUM(ForecastAmountOrg) as AmountOrg,
getdate() as Timestamp

FROM CTE as f

GROUP BY
StudioMain
) as Org

PIVOT(
SUM(AmountOrg)
FOR [StudioMain] IN
([AKL], [CHC], [MEL], [QNT], [SYD], [WEL], [WMT])
)
AS Pivot_Table

enter image description here

Я хочу вставить результаты в таблицу; enter image description here

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

создайте представление запроса CTE и затем укажите задание агента на представление.

0 голосов
/ 12 апреля 2020

Из вашего вопроса я понимаю,

  1. Вам необходимо вставить результаты выполнения запроса на основе PIVOT SQL в таблицу. Итак, мы создадим одну таблицу со столбцами ниже:
  2. Валюта, метка времени, AKL, CH C, MEL, QNT, SYD, WEL, WMT
  3. Затем вы создадите одну SQL Задание агента, куда вы передадите свой SQL Запрос для извлечения данных.
  4. В источнике вам нужно указать детали базы данных таблицы, использованной в вашем запросе.
  5. В пункте назначения вы нужно упомянуть новую таблицу, которую вы собираетесь создать
  6. Запланируйте выполнение этого задания каждый день на 10 вечера

Несмотря на то, что запрос имеет функцию PIVOT, это будет простой SQL агент JOB для вставки нужных данных в таблицу назначения.

...