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

如何解决子查询-关键字'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

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

谢谢。

解决方法

在子查询中,唯一要做的就是编写一条select语句。您无法编写任何想要的东西,就像它是一个代码块一样。

在您的情况下,您可以通过将所有这些表变量移到括号外并填充它们,然后在括号内进行选择来完成所需的操作。就像我说的那样,它不是代码块,没有局部变量。没有更漂亮的方法。 SQL是一种用于查询信息的简单语言。就是这样。

或者,您可能希望使用公用表表达式(CTE s)为每个子查询命名。子查询不以任何临时变量或表的形式存在,就像主查询期间可用的助手名称一样。这样可以解决您想要做的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-