子查询-关键字'declare'附近的语法不正确

问题描述

调试此问题时,希望有人可以帮助我解决此问题。这是更长的查询的一部分,但是子查询“ B”是导致问题的唯一部分,不确定为什么……我显然缺少了一些东西。我正在使用sql-server。

子查询本身可以很好地运行,只是不能与其余查询一起使用。

DECLARE @dstrt AS DATETIME
SET @dstrt = '2020-09-01 00:00:00'

DECLARE @dend AS DATETIME
SET @dend = '2020-09-30 23:59:59'


    DECLARE @UnpaidChgsTot table 
    (
    SiteID INT,Period nvarchar(30),dcDlqntTot money,iDelUnits int,dcPctUnits money,dcPctGrossPot money,dcPctActOcc money,iDatePeriod int
    )

    DECLARE @sLanguageTermColName nvarchar(20)
    SET @sLanguageTermColName = 'English'

    -- DECLARE some period counters
    DECLARE @StartDayNumber int
    DECLARE @EndDayNumber int
    SET @StartDayNumber = 0
    SET @EndDayNumber = -1

    --Hold the original date value
    DECLARE @dEndORig datetime
    SET @dEndORig = @dEnd

    DECLARE @dcGrossPotDenom money
    DECLARE @dcActOccDenom money
    DECLARE @iTotUnitsDenom int

    SET @dcGrossPotDenom =  1 
    SET @dcActOccDenom = 1
    SET @iTotUnitsDenom = 1
    --Define a holding table for charge balances by ChargeID
    DECLARE @BalT table
    (
        SiteID int,ChargeID int,LedgerID int,ChargeDescID int,sChgCategory nvarchar(20),sDefAcctCode nvarchar(20),dChgStrt datetime,dcBalAmt money,dcBalTax1 money,dcBalTax2 money
    )

    /*
     *  Updated.  Delete was taking too long to run,added to WHERE to get rid
     *  Date: 10192009
     *  Josh
     */
     --Fill the @BalT with charge balances for charges <=dEND
    INSERT INTO @BalT
    SELECT
        B.SiteID,B.ChargeID,B.LedgerID,B.ChargeDescID,CD.sChgCategory,CA.sDefAcctCode,B.dChgStrt,dcAmt,dcTax1,dcTax2
    FROM           -- PROBLEM STARTS HERE
    (
      DECLARE @ChargesT2 table
      (
        SiteID int,sChgCategory nvarchar(50),sDefAcctCode nvarchar(5),dcAmt money,dcTax1 money,dcTax2 money,sChargeTag nvarchar(20)
      )
        
        DECLARE @fnPmtSumByChargeT Table 
        (
            SiteID INT,dcPmtSum money
        )
    
        DECLARE @fnPmtSumByChargeT2 Table 
        (
            SiteID INT,dcPmtSum money
        )
    
        DECLARE @ChargesTempT table
        (
            SiteID INT,dcTax2 money
        )

        Declare @ChargesT table
        (
        SiteID INT,sChargeTag nvarchar(20)
        )
    
        INSERT INTO @ChargesT2
        SELECT  
            C.SiteID,C.ChargeID,C.ChargeDescID,sChgCategory,sDefAcctCode,C.dChgStrt,C.LedgerID,Coalesce(C.dcAmt,0.0) AS dcBalAmt,Coalesce(C.dcTax1,0.0) AS dcBalTax1,Coalesce(C.dcTax2,0.0) AS dcBalTax2,CASE 
                WHEN CAST(CA.sDefAcctCode AS INT) = 4000 THEN N'Rent'
                WHEN CAST(CA.sDefAcctCode AS INT) = 4042 THEN N'LateFee'
                WHEN CAST(CA.sDefAcctCode AS INT) = 4041 THEN N'AdminFee'
                WHEN CAST(CA.sDefAcctCode AS INT) = 4070 THEN N'Insurance'
                WHEN CAST(CA.sDefAcctCode AS INT) BETWEEN 4060 AND 4068 OR CAST(CA.sDefAcctCode AS INT) BETWEEN 4071 AND 4079 THEN N'POS'
                --WHEN CAST(CA.sDefAcctCode AS INT) = 2020 THEN 'SecDep'
                ELSE N'Others'
            END as sChargeTag
        FROM Charges AS C
        INNER JOIN ChargeDesc AS CD ON C.ChargeDescID = CD.ChargeDescID
        LEFT OUTER JOIN ChartOfAccts AS CA ON CD.ChartofAcctID = CA.ChartOfAcctID
        WHERE 
             C.dDeleted IS NULL
            AND C.dChgStrt <= @dend
        --2016-01-12 - Case # 237424 - C158,L005,Unit 10478,Tenant - Zach Reese.
        --Commented out dCreated evaluation. This is because A/R does not prevent backdating charges from changing historical reports. There is no way these two reports 
        --can tie out in the same period if we do not allow backdating charges that we created in a future period. Ex. Late fee created on January 2,2016,but dChgStrt of 12/29/2015.
        --AND dCreated <= @dEnd --This is to catch a case where NSF charges were added (backdated) after the report end date,affecting historical reporting. 02102011 Josh
            AND (bNSF = 0 OR (bNSF = 1 AND dCreated <= @dend))--updated the logic to be different for NSF charges to not change reports historically; this loigc is consistant with A/R. Case # 269909
        GROUP BY C.siteID,C.dcAmt,C.dcTax1,C.dcTax2,CA.sDefAcctCode

        INSERT INTO @fnPmtSumByChargeT2
        SELECT 
            SiteID,ChargeID,dcPmtSum 
        FROM 
            (
            SELECT
            pay.SiteID,Pay.ChargeID,SUM(pay.dcPmtAmt) AS dcPmtSum
            FROM 
                ( 
                SELECT 
                    SiteID,dcPmtAmt 
                FROM Payments 
                WHERE 
                    (dDeleted Is Null)
                    --AND (bNSF = 0) --this fn must return ALL payments to calculate balances correctly
                    AND (dPmt <= @dend)
                ) AS Pay
            GROUP BY SiteID,ChargeID
            ) AS P

        INSERT INTO @fnPmtSumByChargeT2
        SELECT
            C.SiteID,0
        FROM @ChargesT2 C

        INSERT INTO @fnPmtSumByChargeT
        SELECT
            P.SiteID,P.ChargeID,SUM(P.dcPmtSum)
        FROM @fnPmtSumByChargeT2 P
        GROUP BY P.SiteID,P.ChargeID

        INSERT INTO @ChargesTempT
        SELECT
            P.SiteID,C.dcAmt - Coalesce(dbo.fnPartNonTax(C.dcAmt,P.dcPmtSum,2),0.0),C.dcTax1 - Coalesce(dbo.fnPartTax1(C.dcAmt,2,C.dcTax2 - Coalesce(dbo.fnPartTax2(C.dcAmt,0.0)
        FROM @ChargesT2 C
        INNER JOIN @fnPmtSumByChargeT P ON C.ChargeID = P.ChargeID
        GROUP BY P.SiteId,dcTax2,dcPmtSum
        HAVING (dcAmt + dcTax1 + dcTax2 - dcPmtSum) > 0  -- Removed 0 sum columns: This was a major bottleneck for this function  10202009 J

        INSERT INTO @ChargesT
        SELECT 
            C.SiteID,C.sChgCategory,C.sDefAcctCode,CT.dcAmt,CT.dcTax1,CT.dcTax2,C.sChargeTag
        FROM @ChargesT2 C
        INNER JOIN @ChargesTempT CT ON C.ChargeID = CT.ChargeID 

    SELECT *
    FROM @ChargesT
    AS ChargeT      
    ) AS B                              -- PROBLEM ENDS HERE

    INNER JOIN ChargeDesc AS CD ON B.ChargeDescID = CD.ChargeDescID AND B.Siteid = CD.SiteID

如果有帮助,我在注释中指出“问题从这里开始”和“问题从这里结束”。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)