“1”附近的语法不正确。(SQLSTATE=42000)(102)(严重性=15)

“1”附近的语法不正确。(SQLSTATE=42000)(102)(严重性=15),sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在SQL Server上尝试下面的查询。除了尝试使用pivot子句外,查询运行良好 怎么了?我在这里干什么?请帮忙 我试过使用[],但还是不走运 WITH main AS ( SELECT * FROM ( select a.LBrCode, a.PrdAcctId, a.AcctStat, b.ModuleType,

我正在SQL Server上尝试下面的查询。除了尝试使用pivot子句外,查询运行良好

怎么了?我在这里干什么?请帮忙

我试过使用[],但还是不走运

WITH main AS 
(
   SELECT
      * 
   FROM
      (
         select
            a.LBrCode,
            a.PrdAcctId,
            a.AcctStat,
            b.ModuleType,
            c.CodeDesc AS stat_desc,
            a.DateOpen opn_date,
            a.FreezeType,
            a.FrzReasonCd,
            isnull(d.AMLRating, 1) amlrating,
            CASE
               WHEN
                  (
                     a.AcctStat = 3 
                     AND a.DateClosed > '31-dec-2020'
                  )
                  OR a.AcctStat <> 3 
               THEN
                  'live' 
               ELSE
                  'closed' 
            END r1 
         from
            ac_mast a 
            inner join
               product_mast b 
               on a.LBrCode = b.LBrCode 
               and rtrim(substring(a.PrdAcctId, 1, 8)) = rtrim(b.PrdCd) 
            left join
               lkd c 
               on a.AcctStat = c.Code 
               and c.CodeType = 1057 
            LEFT JOIN
               cust_mast d 
               ON a.CustNo = d.CustNo 
         where
            b.ModuleType in 
            (
               11, 12
            )
         UNION ALL
         select
            a.LBrCode,
            a.PrdAcctId,
            b.AcctStat,
            c.ModuleType,
            d.CodeDesc AS stat_desc,
            a.CertDate opn_date,
            b.FreezeType,
            b.FrzReasonCd,
            isnull(e.AMLRating, 1) amlrating,
            (
               case
                  when
                     (
                        a.ReceiptStatus = 99 
                        and a.ClosedDate > '31-dec-2020'
                     )
                     or a.ReceiptStatus in 
                     (
                        51,
                        97
                     )
                  then
                     'live' 
                  else
                     'closed' 
               end
            ) r1 
         FROM
            D020004 a 
            INNER JOIN
               ac_mast b 
               ON a.LBrCode = b.LBrCode 
               AND substring(a.PrdAcctId, 1, 24) = substring(b.PrdAcctId, 1, 24) 
            INNER JOIN
               product_mast c 
               ON a.LBrCode = c.LBrCode 
               and rtrim(substring(a.PrdAcctId, 1, 8)) = rtrim(c.PrdCd) 
            LEFT JOIN
               lkd d 
               ON b.AcctStat = d.Code 
               AND d.CodeType = 1057 
            LEFT JOIN
               cust_mast e 
               ON b.CustNo = e.CustNo 
      )
      x 
   WHERE
      r1 = 'live' 
)
, hrk AS 
(
   SELECT
      * 
   FROM
      inop_mast
)
,
bal AS 
(
   SELECT
      * 
   FROM
      (
         SELECT
            a.LBrCode,
            a.PrdAcctId,
            a.Balance1,
            a.Balance2,
            a.Balance3,
            a.Balance4,
            b.ModuleType,
            rank() over
               (PARTITION BY a.LBrCode, a.PrdAcctId 
                ORDER BY a.CblDate DESC) rnk,
            CASE
               WHEN
                  (
                     b.ModuleType = 20 
                     AND floor(substring(a.PrdAcctId, 17, 8)) <> 0 
                  )
               THEN
                  a.Balance1 
               ELSE
                  a.Balance4 
            END amt 
         FROM
            cl_mast a 
            INNER JOIN
               product_mast b 
               on a.LBrCode = b.LBrCode 
               and rtrim(substring(a.PrdAcctId, 1, 8)) = rtrim(b.PrdCd) 
         WHERE
            a.CblDate <= '31-dec-2020' 
      )
      t 
   WHERE
      rnk = 1 
)
--
SELECT
   * 
FROM
   (
      SELECT
         a.FreezeType,
         a.AcctStat,
         a.stat_desc,
         a.amlrating,
         b.amt,
         c.LBrCode,
         c.PrdAcctId 
      FROM
         main a 
         LEFT JOIN
            bal b 
            ON a.LBrCode = b.LBrCode 
            AND a.PrdAcctId = b.PrdAcctId 
         left join
            hrk c 
            on a.LBrCode = c.LBrCode 
            and a.PrdAcctId = c.PrdAcctId 
            and c.DormantDt between '01-oct-2020' and '31-dec-2020' 
      where
         a.amlrating <> 0 
   )
   r
pivot (
   sum(amt)
   FOR amlrating IN (1, 2, 3)
) pt

请帮忙

我正在使用Microsoft SQL Server Management Studio v14.0.17199.0

代码有点长,但希望大家都理解

大家好,我已经发布了一个更正的查询


根据我们的office规则,无法显示表名。

您的CTE kyc\u dt中的子查询没有别名。对于这样的东西,如果您告诉我们错误指向哪一行,它确实很有帮助。tsql没有to_date函数,to_date不是T-SQL函数。两者都不是。RTRIM只接受一个参数。。。如果我诚实的话,错误太多了。在这之前有很多问题。你在这里做了标记,不是甲骨文;由于许多原因,上面的T-SQL无效。一些基本格式可能会有所帮助,空白是免费的。在[1]、[2]、[3]中尝试反洗钱