sql 查询中的对象不存在备注

Object does not exist memo from sql query

我有这个 sql 查询:

Select top 10
sub_id1

FROM
(Select top 10
offer_loj_OD.subs_id as sub_id1,
offer_loj_OD.offer_id,
offer_loj_OD.subs_inst_offer_id,
offer_loj_OD.loj_od, offer_loj_OD.loj_do
FROM
(SELECT subs_id, offer_id,  subs_inst_offer_id, CAST(data_od AS DATE) AS loj_od
, CAST(data_do AS DATE) AS loj_do   , src_system_cd 
FROM
(SELECT subs_id,subs_inst_offer_id, ST_DT, end_dt, early_term_dt, offer_id, src_system_cd
,COALESCE(MIN(ST_DT) OVER (PARTITION BY subs_id
, subs_inst_offer_id ORDER BY ST_DT ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)    ,  ST_DT )  AS data_od
, CASE WHEN early_term_dt <=end_dt AND early_term_dt IS NOT NULL THEN early_term_dt ELSE end_dt END AS data_do
FROM vd08_offer.T08010_SUBS_INST_OFFER
) AS umowy
QUALIFY ROW_NUMBER() OVER (PARTITION BY subs_id, subs_inst_offer_id ORDER BY ST_DT DESC) = 1
) AS offer_loj_OD

WHERE 
loj_od between '2015-01-01' and '2015-12-31' 
AND offer_loj_OD.src_system_cd =1 

) as offer_loj_OD_FINAL

left join 


(SELECT top 10
offer_loj_do.subs_id  
, offer_loj_do.offer_id 
, offer_loj_do.subs_inst_offer_id
, offer_loj_do.loj_od, offer_loj_do.loj_do -- datay 

FROM
(SELECT subs_id, offer_id,  subs_inst_offer_id, CAST(data_od AS DATE) AS loj_od
, CAST(data_do AS DATE) AS loj_do   , src_system_cd 
FROM
(SELECT subs_id,subs_inst_offer_id, ST_DT, end_dt, early_term_dt, offer_id, src_system_cd
,COALESCE(MIN(ST_DT) OVER (PARTITION BY subs_id
, subs_inst_offer_id ORDER BY ST_DT ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)    ,  ST_DT )  AS data_od
, CASE WHEN early_term_dt <=end_dt AND early_term_dt IS NOT NULL THEN early_term_dt ELSE end_dt END AS data_do
FROM vd08_offer.T08010_SUBS_INST_OFFER
) AS umowy
QUALIFY ROW_NUMBER() OVER (PARTITION BY subs_id, subs_inst_offer_id ORDER BY ST_DT DESC) = 1
) AS offer_loj_do

WHERE 
loj_do between '2015-01-01' and '2015-12-31'
AND offer_loj_do.src_system_cd =1 
) as offer_loj_do_final on offer_loj_do.subs_id = offer_loj_OD.subs_id

当我尝试 运行 它时,我收到错误消息:SELECT 失败。 [3807] 对象 'offer_loj_do' 不存在。你能告诉我我做错了什么吗?

也许关于查询的几句话。我需要 select 数据,其中与客户的协议将在 2015 年完成(查询的第二部分),但该客户决定签署新协议(查询的第一部分)。

希望你能帮帮我。

解析器抱怨最后的 ON 你尝试加入 offer_loj_dooffer_loj_od,但只有 offer_loj_do_finaloffer_loj_od_final 在当前范围。有效的加入条件是

 ON offer_loj_do_final.sub_id1 = offer_loj_od_final.subs_id

但这没有意义,你连接了两个完全相同的派生表Select。

而且你的格式很糟糕,这是它通过格式化工具后的样子:-)

SELECT
   TOP 10 sub_id1
FROM
   ( 
      SELECT
         TOP 10 offer_loj_od.subs_id AS sub_id1 
       , offer_loj_od.offer_id 
       , offer_loj_od.subs_inst_offer_id 
       , offer_loj_od.loj_od 
       , offer_loj_od.loj_do
      FROM
         ( 
            SELECT
               subs_id 
             , offer_id 
             , subs_inst_offer_id 
             , CAST(data_od AS DATE) AS loj_od 
             , CAST(data_do AS DATE) AS loj_do 
             , src_system_cd
            FROM
               ( 
                  SELECT
                     subs_id 
                   , subs_inst_offer_id 
                   , st_dt 
                   , end_dt 
                   , early_term_dt 
                   , offer_id 
                   , src_system_cd 
                   , COALESCE(MIN(st_dt) OVER (partition BY subs_id , subs_inst_offer_id order by st_dt ROWS BETWEEN 1 preceding AND 1 preceding) , st_dt ) AS data_od 
                   , CASE
                        WHEN early_term_dt            <=end_dt
                           AND early_term_dt is not null
                        THEN early_term_dt
                        ELSE end_dt
                     END AS data_do
                  FROM
                     vd08_offer.t08010_subs_inst_offer
               ) AS umowy 
            QUALIFY ROW_NUMBER() OVER (partition BY subs_id, subs_inst_offer_id order by st_dt DESC) = 1
         ) AS offer_loj_od
      WHERE loj_od BETWEEN '2015-01-01' AND '2015-12-31'
         AND offer_loj_od.src_system_cd =1
   ) AS offer_loj_od_final
LEFT JOIN
   ( 
      SELECT
         TOP 10 offer_loj_do.subs_id 
       , offer_loj_do.offer_id 
       , offer_loj_do.subs_inst_offer_id 
       , offer_loj_do.loj_od 
       , offer_loj_do.loj_do -- datay
      FROM
         ( 
            SELECT
               subs_id 
             , offer_id 
             , subs_inst_offer_id 
             , CAST(data_od AS DATE) AS loj_od 
             , CAST(data_do AS DATE) AS loj_do 
             , src_system_cd
            FROM
               ( 
                  SELECT
                     subs_id 
                   , subs_inst_offer_id 
                   , st_dt 
                   , end_dt 
                   , early_term_dt 
                   , offer_id 
                   , src_system_cd 
                   , COALESCE(MIN(st_dt) OVER (partition BY subs_id , subs_inst_offer_id order by st_dt ROWS BETWEEN 1 preceding AND 1 preceding) , st_dt ) AS data_od 
                   , CASE
                        WHEN early_term_dt            <=end_dt
                           AND early_term_dt is not null
                        THEN early_term_dt
                        ELSE end_dt
                     END AS data_do
                  FROM
                     vd08_offer.t08010_subs_inst_offer
               ) AS umowy 
            QUALIFY ROW_NUMBER() OVER (partition BY subs_id, subs_inst_offer_id order by st_dt DESC) = 1
         ) AS offer_loj_do
      WHERE loj_do BETWEEN '2015-01-01' AND '2015-12-31'
         AND offer_loj_do.src_system_cd =1
   ) AS offer_loj_do_final 
ON offer_loj_do.subs_id = offer_loj_od.subs_id