Я создал запрос переменной SQL, где я объявляю запрос SQL, который я хочу использовать, из-за имен таблиц переменных. Наш SQL настроен на основе имени учетной записи в системе. Это означает, что это выглядит примерно так: [LSRetail].[dbo].[AccountName$Item]
.
Здесь часть LSRetail
является динамической c, поскольку она называется LSRetailDK
, если это Дания, и LSRetailSE
, если это Швеция. AccountName
также является динамическим c из-за различных названий магазинов и почтовых индексов ...
Все это на самом деле работает и объявлено и установлено на @Sql
, но из-за пробела я бы хотел сделать еще один DECLARE @Sql2 VARCHAR(8000)
, в котором я хочу SELECT * FROM @Sql
. Поскольку @Sql
начинается с оператора with cte1 AS (
, это не позволит мне сделать это.
Возможно ли здесь что-то сделать? Я хотел бы объединить два в @Sql2
или, может быть, в @Sql3
. Прямо сейчас, единственное, что работает, это SET @Sql2 = @Sql
и выполнение этого.
Код ниже, это код для @Sql
, который я хочу использовать внутри @Sql2
.
DECLARE @OrderNo VARCHAR(50);
DECLARE @StoreName VARCHAR(100);
DECLARE @Table1 VARCHAR(1000);
DECLARE @Table2 VARCHAR(1000);
DECLARE @Table3 VARCHAR(1000);
DECLARE @Table4 VARCHAR(1000);
DECLARE @Table5 VARCHAR(1000);
DECLARE @Table6 VARCHAR(1000);
DECLARE @Table7 VARCHAR(1000);
DECLARE @Table8 VARCHAR(1000);
DECLARE @Table9 VARCHAR(1000);
DECLARE @Database VARCHAR(1000);
DECLARE @BulkDiscount VARCHAR(1000);
DECLARE @DisclaimerDiscount VARCHAR(1000);
DECLARE @CashDiscount VARCHAR(1000);
DECLARE @Loyalty VARCHAR(1000);
DECLARE @Orders VARCHAR(8000);
SET @Database = '[LSRetail]'
SET @StoreName = 'AccountName';
SET @Orders = '''TI0573057'', ''TI0572704'', ''TI0572541'', ''TI0573058'', ''TI0572983'', ''TI0572595'', ''TI0573516'', ''TI0572841'', ''TI0573175'', ''TI0572759'', ''TI0572861'', ''TI0572917'', ''TI0568408'', ''TI0573077'', ''TI0572641'', ''TI0570757'', ''TI0573419'', ''TI0573394'', ''TI0572893'', ''TI0573029'', ''TI0573317'', ''TI0572581'', ''TI0570652'', ''TI0573061'', ''TI0573340'', ''TI0572417'', ''TI0572769'', ''TI0573315'', ''TI0572975'', ''TI0573304'', ''TI0573381'', ''TI0572976'', ''TI0572862'', ''TI0572886'', ''TI0573615'', ''TI0573049'', ''TI0572811'', ''TI0573156'', ''TI0573222'', ''TI0573095'', ''TI0573023''';
SET @BulkDiscount = 2.5/100
SET @DisclaimerDiscount = 1.5/100
SET @CashDiscount = 0.0/100
SET @Loyalty = 5.3/100
SET @Table1 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Sales Invoice Line]');
SET @Table2 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Sales Invoice Header]');
SET @Table3 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Item]');
SET @Table4 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Sales Cr_Memo Line]');
SET @Table5 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Sales Cr_Memo Header]');
SET @Table6 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Purchase Inv_ Header]');
SET @Table7 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Purchase Inv_ Line]');
SET @Table8 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Purchase Cr_ Memo Hdr_]');
SET @Table9 = CONCAT(@Database,'.[dbo].[','' + @StoreName + '','$Purchase Cr_ Memo Line]');
DECLARE @Sql VARCHAR(8000);
SET @Sql =
'
WITH cte1 AS(
SELECT a.[Document No_]
,''Invoice'' AS [Document Type]
,b.[Unique Document No_]
,a.[Type]
,a.[No_]
,c.[Vendor Item No_]
,a.[Gen_ Prod_ Posting Group]
,a.[VAT Bus_ Posting Group]
,a.[VAT Prod_ Posting Group]
,a.[Description]
,a.[Item Order Group Code]
,a.[Quantity]
,a.[Unit of Measure]
,a.[Unit Cost (LCY)]
,a.[Unit Price]
,a.[Line Amount]
,a.[Line Discount %]
,a.[Line Amount]/(a.[VAT %]/100+1)*0.96 AS [Total Line Sales]
,CASE WHEN a.[No_] NOT LIKE ''SM%'' OR a.[No_] NOT LIKE ''LE%'' AND a.[No_] NOT LIKE ''%99999'' AND a.[Item Order Group Code] = ''OVT00100'' AND a.[Item Order Group Code] <> ''OVT00500''
THEN a.[Unit Cost (LCY)]*a.[Quantity] * (1-' + @DisclaimerDiscount + ') * (1-' + @BulkDiscount + ') * (1-' + @CashDiscount + ') * (1-' + @Loyalty + ')
WHEN a.[No_] LIKE ''SM%'' OR a.[No_] LIKE ''LE%'' AND a.[No_] LIKE ''%99999''
THEN a.[Unit Cost (LCY)]*a.[Quantity]
WHEN a.[No_] NOT LIKE ''SM%'' OR a.[No_] NOT LIKE ''LE%'' AND a.[No_] NOT LIKE ''%99999'' AND a.[Item Order Group Code] <> ''OVT00100'' AND a.[Item Order Group Code] <> ''OVT00500''
THEN a.[Unit Cost (LCY)]*a.[Quantity] * (1-' + @CashDiscount + ') * (1-' + @Loyalty + ')
WHEN a.[No_] NOT LIKE ''SM%'' OR a.[No_] NOT LIKE ''LE%'' AND a.[No_] NOT LIKE ''%99999'' AND a.[Item Order Group Code] = ''OVT00100'' AND a.[Item Order Group Code] = ''OVT00500''
THEN a.[Unit Cost (LCY)]*a.[Quantity]
END AS [Total Line Cost]
FROM ' + @Table1 + ' a
LEFT JOIN ' + @Table2 + ' b ON a.[Document No_] = b.[No_]
LEFT JOIN ' + @Table3 + ' c ON a.[No_] = c.[No_]
WHERE b.[Prepayment Invoice] = 0
),
cte2 AS(
SELECT a.[Document No_]
,''Credit Memo'' AS [Document Type]
,b.[Unique Document No_]
,a.[Type]
,a.[No_]
,c.[Vendor Item No_]
,a.[Gen_ Prod_ Posting Group]
,a.[VAT Bus_ Posting Group]
,a.[VAT Prod_ Posting Group]
,a.[Description]
,a.[Item Order Group Code]
,a.[Quantity] * (-1) AS [Quantity]
,a.[Unit of Measure]
,a.[Unit Cost (LCY)]
,a.[Unit Price]
,a.[Line Amount]
,a.[Line Discount %]
,a.[Line Amount]/(a.[VAT %]/100+1)*0.96 AS [Total Line Sales]
,CASE WHEN a.[No_] NOT LIKE ''SM%'' OR a.[No_] NOT LIKE ''LE%'' AND a.[No_] NOT LIKE ''%99999'' AND a.[Item Order Group Code] = ''OVT00100'' AND a.[Item Order Group Code] <> ''OVT00500''
THEN a.[Unit Cost (LCY)]*a.[Quantity] * (1-' + @DisclaimerDiscount + ') * (1-' + @BulkDiscount + ') * (1-' + @CashDiscount + ') * (1-' + @Loyalty + ')
WHEN a.[No_] LIKE ''SM%'' OR a.[No_] LIKE ''LE%'' AND a.[No_] LIKE ''%99999''
THEN a.[Unit Cost (LCY)]*a.[Quantity]
WHEN a.[No_] NOT LIKE ''SM%'' OR a.[No_] NOT LIKE ''LE%'' AND a.[No_] NOT LIKE ''%99999'' AND a.[Item Order Group Code] <> ''OVT00100'' AND a.[Item Order Group Code] <> ''OVT00500''
THEN a.[Unit Cost (LCY)]*a.[Quantity] * (1-' + @CashDiscount + ') * (1-' + @Loyalty + ')
WHEN a.[No_] NOT LIKE ''SM%'' OR a.[No_] NOT LIKE ''LE%'' AND a.[No_] NOT LIKE ''%99999'' AND a.[Item Order Group Code] = ''OVT00100'' AND a.[Item Order Group Code] = ''OVT00500''
THEN a.[Unit Cost (LCY)]*a.[Quantity]
END AS [Total Line Cost]
FROM ' + @Table4 + ' a
LEFT JOIN ' + @Table5 + ' b ON a.[Document No_] = b.[No_]
LEFT JOIN ' + @Table3 + ' c ON a.[No_] = c.[No_]
WHERE b.[Prepayment Credit Memo] = 0
),
cte3 AS(
SELECT *
FROM cte1
UNION ALL
SELECT *
FROM cte2
)
SELECT *
,CASE WHEN [Total Line Sales] <> 0
THEN ([Total Line Sales] - [Total Line Cost])
ELSE 0
END AS [Margin]
,CASE WHEN [Total Line Sales] <> 0
THEN ([Total Line Sales] - [Total Line Cost])/[Total Line Sales]
ELSE 0
END AS [Margin %]
FROM cte3
WHERE [No_] <> ''''
AND [Unique Document No_] IN (' + @Orders + ')
ORDER BY [Unique Document No_], [Item Order Group Code]
'
Заранее благодарю за помощь.
Примечание: я использую SQL Сервер.