postgresql 为什么我在向这个查询添加另一个“with语句”时总是得到语法错误?

1l5u6lss  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(2)|浏览(96)

对不起,如果这是如此明显容易,但我是新来的!我试图添加另一个与语句的查询,工作完美的罚款,但休息时,我编辑它。
我正在尝试的查询是:

--- select the term name ---
with  term_name as (select dfs.k_form_submission,
   dfs.k_form,
   dfs.k_district as "district_id",
   dff.form_name,
   ffr.question_response as "term",
  dfs.submitted_at
from 
    prod_wh_pls.dim_pls_fa_forms dff
inner join 
    prod_wh_pls.dim_pls_fa_submissions dfs
on 
   dfs.k_form = dff.k_form
inner join 
    prod_wh_pls.fct_pls_fa_responses ffr
on 
   dfs.k_form_submission = ffr.k_form_submission
where 
   (dff.k_form = 423614 or dff.k_form = 423615 or dff.k_form = 423608 or dff.k_form = 423613 or dff.k_form = 423670 or dff.k_form = 423706)
and 
   (ffr.question_name = 'term' or ffr.question_name = 'session_name')
and 
    dfs.k_form_submission != 457891),
fixed_district as (
    select case when ffr.question_response = '2103480' then '16f7e40689605582e8fcfe7bc52481c4' else dfs.k_district end as "k_district", ffr.question_response as "nces_id", ffr.k_form_submission

from 
 prod_wh_pls.fct_pls_fa_responses ffr
inner join 
    prod_wh_pls.dim_pls_fa_submissions dfs
on 
    ffr.k_form_submission = dfs.k_form_submission
where 
    (ffr.question_name) = 'nces_id' and (ffr.k_form = 423706))

--- final query ----
select 
   dfs.k_form_submission, dfs.k_form,
   dfs.k_district as "district_id",
   dff.form_name,
   ffr.question_name,
   ffr.question_response,
   dfs.submitted_at,
   (case when dfs.submitted_at < date '07-15-2022' then '2021-2022'
   else tna.term end) as "term",
   dfs.is_latest_submission,
   dfs.completion_time
from 
   prod_wh_pls.dim_pls_fa_forms dff
inner join 
    prod_wh_pls.dim_pls_fa_submissions dfs
on 
    dfs.k_form = dff.k_form
inner join 
    prod_wh_pls.fct_pls_fa_responses ffr
on 
   dfs.k_form_submission = ffr.k_form_submission
left join 
    term_name tna
on 
   tna.k_form_submission = dfs.k_form_submission
where 
   (dff.k_form = 423614 or dff.k_form = 423615 or dff.k_form = 423608 or dff.k_form = 423613 or dff.k_form = 423670 or dff.k_form = 423706)
and 
   dfs.k_form_submission != 457891
and 
   dfs.k_district is not null
and 
   (dfs.completion_time not ilike '%day%' and dfs.completion_time not ilike '%hr%')

我知道“final query”后面的查询是不正确的--但是我甚至不能通过添加另一个“with”来进入下一部分的问题!我总是在--- final query---之前的最后一行得到“syntax error at end of input”。我该如何解决这个问题?
我试着重新排列WITH语句的顺序,但没有用。我试着编辑最后的查询代码部分,但什么也没有得到。太沮丧了

afdcj2ne

afdcj2ne1#

查询似乎没问题,请添加分号(;)。如果您仍然得到此错误,请检查表名和列名。
如果你能提供任何dbfiddle链接就太好了。
我还对查询做了一些更改。请尝试以下操作:

WITH 
term_name AS (
    SELECT 
        dfs.k_form_submission,
        dfs.k_form,
        dfs.k_district AS district_id,
        dff.form_name,
        ffr.question_response AS term,
        dfs.submitted_at
    FROM 
        prod_wh_pls.dim_pls_fa_forms dff
        INNER JOIN prod_wh_pls.dim_pls_fa_submissions dfs ON dfs.k_form = dff.k_form
        INNER JOIN prod_wh_pls.fct_pls_fa_responses ffr ON dfs.k_form_submission = ffr.k_form_submission
    WHERE 
        dff.k_form IN (423614, 423615, 423608, 423613, 423670, 423706)
        AND ffr.question_name IN ('term', 'session_name')
        AND dfs.k_form_submission != 457891
),
fixed_district AS (
    SELECT 
        CASE 
            WHEN ffr.question_response = '2103480' THEN '16f7e40689605582e8fcfe7bc52481c4' 
            ELSE dfs.k_district 
        END AS k_district, 
        ffr.question_response AS nces_id, 
        ffr.k_form_submission
    FROM 
        prod_wh_pls.fct_pls_fa_responses ffr
        INNER JOIN prod_wh_pls.dim_pls_fa_submissions dfs ON ffr.k_form_submission = dfs.k_form_submission
    WHERE 
        ffr.question_name = 'nces_id' 
        AND ffr.k_form = 423706
)
SELECT 
    dfs.k_form_submission, 
    dfs.k_form,
    dfs.k_district AS district_id,
    dff.form_name,
    ffr.question_name,
    ffr.question_response,
    dfs.submitted_at,
    (CASE 
        WHEN dfs.submitted_at < date '07-15-2022' THEN '2021-2022'
        ELSE tna.term 
    END) AS term,
    dfs.is_latest_submission,
    dfs.completion_time
FROM 
    prod_wh_pls.dim_pls_fa_forms dff
    INNER JOIN prod_wh_pls.dim_pls_fa_submissions dfs ON dfs.k_form = dff.k_form
    INNER JOIN prod_wh_pls.fct_pls_fa_responses ffr ON dfs.k_form_submission = ffr.k_form_submission
    LEFT JOIN term_name tna ON tna.k_form_submission = dfs.k_form_submission
WHERE 
    dff.k_form IN (423614, 423615, 423608, 423613, 423670, 423706)
    AND dfs.k_form_submission != 457891
    AND dfs.k_district IS NOT NULL
    AND (dfs.completion_time NOT ILIKE '%day%' AND dfs.completion_time NOT ILIKE '%hr%');
jexiocij

jexiocij2#

下面是一些基于您的查询的反向工程表/列:https://dbfiddle.uk/Df99nCG7查询运行没有错误,但我不得不将硬编码的日期文字从DD-MM-YYYY更改为YYYY_MM_DD:

, (CASE WHEN dfs.submitted_at < DATE '2022-07-15' THEN '2021-2022' ELSE tna.term END) AS "term"

如果这不能解决问题,请检查我使用的DDL,它是否与您的真实的DDL有很大差异?也许用原始DDL替换我的DDL并重新运行。如果您仍然有错误,请提供该小提琴的URL。

相关问题