1

Я хочу передать значение 1 из моих столбцов в своих операторах SELECT в переменной.Значение пересылки в переменной

Вот мой пример код:

DECLARE @TotalExpense DECIMAL(18,2) 
SELECT a.[Posting Date] AS [Check Date], 
    a.[Document No_] AS [Check Number], 
    a.[Vendor No_], 
    (
    SELECT SUM(CASE WHEN GLEntry.[VAT Amount] <> 0 THEN CAST(GLEntry.Amount AS DECIMAL(18,2)) ELSE 0 END) FROM [BLI$Detailed Vendor Ledg_ Entry] DtldVendLedger 
    LEFT JOIN [BLI$G_L Entry] GLEntry 
    ON GLEntry.[Document No_] = (SELECT VendLedger.[Document No_] FROM [BLI$Vendor Ledger Entry] VendLedger 
           WHERE VendLedger.[Entry No_] = DtldVendLedger.[Vendor Ledger Entry No_]) 
    WHERE DtldVendLedger.[Entry Type] = 2 AND DtldVendLedger.[Initial Document Type] = 2 AND DtldVendLedger.[Document No_] = a.[Document No_] 
     AND GLEntry.[Source Code] = 'PURCHASES' AND GLEntry.[G_L Account No_] NOT IN ('2003','1402','1403','1401') 
    ) AS [Vatable], 

    (
    SELECT SUM(CASE WHEN GLEntry.[VAT Amount] <> 0 THEN CAST(GLEntry.Amount * 0.12 AS DECIMAL(18,2)) ELSE 0 END) FROM [BLI$Detailed Vendor Ledg_ Entry] DtldVendLedger 
    LEFT JOIN [BLI$G_L Entry] GLEntry 
    ON GLEntry.[Document No_] = (SELECT VendLedger.[Document No_] FROM [BLI$Vendor Ledger Entry] VendLedger 
           WHERE VendLedger.[Entry No_] = DtldVendLedger.[Vendor Ledger Entry No_]) 
    WHERE DtldVendLedger.[Entry Type] = 2 AND DtldVendLedger.[Initial Document Type] = 2 AND DtldVendLedger.[Document No_] = a.[Document No_] 
     AND GLEntry.[Source Code] = 'PURCHASES' AND GLEntry.[G_L Account No_] NOT IN ('2003','1402','1403','1401') 
    ) AS [Input Tax], 

    (
    SELECT SUM(CASE WHEN GLEntry.[VAT Amount] = 0 THEN CAST(GLEntry.Amount AS DECIMAL(18,2)) ELSE 0 END) FROM [BLI$Detailed Vendor Ledg_ Entry] DtldVendLedger 
    LEFT JOIN [BLI$G_L Entry] GLEntry 
    ON GLEntry.[Document No_] = (SELECT VendLedger.[Document No_] FROM [BLI$Vendor Ledger Entry] VendLedger 
           WHERE VendLedger.[Entry No_] = DtldVendLedger.[Vendor Ledger Entry No_]) 
    WHERE DtldVendLedger.[Entry Type] = 2 AND DtldVendLedger.[Initial Document Type] = 2 AND DtldVendLedger.[Document No_] = a.[Document No_] 
     AND GLEntry.[Source Code] = 'PURCHASES' AND GLEntry.[G_L Account No_] NOT IN ('2003','1402','1403','1401') 
    ) AS [Non-Vat] 

Я хочу просуммировать, облагаются НДС входного налога, и Nonvat затем передать значение в переменный, то переменном будет использоваться в моем ЗЕЬЕСТЕ.

+0

Вы можете либо выбрать запрос в верхней части этого запроса, чтобы показать сумму, либо вы можете изменить существующий запрос, чтобы получить сумму в виде столбца. Если вы можете взять это отсюда, то хорошо, иначе разместите более подробную информацию о том, что вы хотите дальше. – Adish

ответ

1

Я попытался немного изменить ваш запрос. В вашем запросе часть с запросом DtldVendLedger внутри условия соединения не должна быть действительной. Если у вас это получилось, я понятия не имею, как это сделать.

Из-за того, как я думаю, что вы суммируете, я не думаю, что это важно, использовали ли вы внешние соединения или внутренние соединения. Строки с нулевым значением GLEntry в любом случае считаются нулями.

DECLARE @vatable DECIMAL(18, 2); 
DECLARE @inputtax DECIMAL(18, 2); 
DECLARE @nonvat DECIMAL(18, 2); 

SELECT 
    @vatable = SUM(
     CASE 
      WHEN GLEntry.[VAT Amount] <> 0 
      THEN CAST(GLEntry.Amount AS DECIMAL(18,2)) ELSE 0 END 
    ), 
    @nonvat = SUM(
     CASE 
      WHEN GLEntry.[VAT Amount] = 0 
      THEN CAST(GLEntry.Amount AS DECIMAL(18,2)) ELSE 0 END 
    ) 
FROM 
    A as a /* I'm assuming there was a FROM referencing a table "a" */ 
    [BLI$Detailed Vendor Ledg_ Entry] DtldVendLedger 
    INNER JOIN 
     ON DtldVendLedger.[Document No_] = a.[Document No_] 
    LEFT OUTER JOIN [BLI$Vendor Ledger Entry] VendLedger 
     ON VendLedger.[Entry No_] = DtldVendLedger.[Vendor Ledger Entry No_] 
    LEFT OUTER JOIN [BLI$G_L Entry] GLEntry 
     ON GLEntry.[Document No_] = VendLedger.[Document No_] 
WHERE 
     a.??? = ??? 
    AND DtldVendLedger.[Entry Type] = 2 
    AND DtldVendLedger.[Initial Document Type] = 2 
    AND GLEntry.[Source Code] = 'PURCHASES' 
    AND GLEntry.[G_L Account No_] NOT IN ('2003','1402','1403','1401'); 

SET @inputtax = 0.12 * @vatable; 
+0

Вау! Shawnt! Благодарю вас! Извините, мой код неполный, но все же вам удалось перекодировать его удивительно! Снова Спасибо, сэр Шонт за ваш ответ! – Marc