Accepted answer
-
Dan Guzman 7,301 Reputation points
2021-02-24T12:05:53.037+00:00 One way is to define the source query as a derived table (wrapped in parenthesis with an alias). Below is an example:
select * into #join from ( SELECT 0 as 'OrgSalesOrder', p.OrderNumber 'SalesOrder', p.InvoiceNumber, p.CreditNumber, p.PaymentID as 'PaymentID', p.Currency as 'Currency', --c.CustomerID, --concat(c.FirstName + ' ', c.LastName) as CustomerName, d.FullDate, pc.PaymentName as PaymentMethod, ps.[Description] as PaymentStatus, p.PaymentValue, cn.Authorisation as ChequeNum, tt.TransactionType, p.ManualRefund, case when p.PaymentID like 'D%' then so.SalesOfficeKey else p.SalesOfficeKey end as SalesOffice FROM #testPayments p left join #DreamPayments DP on p.PaymentID = 'D' + cast(dp.PaymentNumber as varchar) left join test.DimSalesOffice so on DP.SalesOffice = so.SalesOfficeCode INNER JOIN dbo.DimDate d on p.PaymentDateKey = d.DateKey INNER JOIN [dbo].[DimPaymentStatus] ps on p.PaymentStatusKey = ps.PaymentStatusKey INNER JOIN [dbo].[DimTransactionType] tt on p.TransactionTypeKey = tt.TransactionTypeKey Left outer join [dbo].[DimPaymentCode] pc on p.PaymentCodeKey = pc.PaymentCodeKey LEFT OUTER JOIN #ChequeNum cn ON p.PaymentID = Cast(cn.Payment_Num as Nvarchar) ) AS derived_table