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_do
和 offer_loj_od
,但只有 offer_loj_do_final
和 offer_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
我有这个 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_do
和 offer_loj_od
,但只有 offer_loj_do_final
和 offer_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