【问题标题】:SQL: invalid identifierSQL:无效的标识符
【发布时间】:2019-07-23 15:31:10
【问题描述】:

我需要一些关于 SQL 的帮助:

SELECT
    servidor,
    matricula,
    funcao,
    TO_CHAR(admissao, 'dd/mm/yyyy'),
    vatagens,
    escolaridade
FROM
    (
        SELECT DISTINCT
            pf.nome        AS servidor,
            m.matricula    AS matricula,
            ca.descricao   AS funcao,
            TO_CHAR(c.dataadmissao, 'dd/mm/yyyy') AS "admissao",
            LISTAGG(if.valorreferencia
                    || '-'
                    || ev.descricaoreduzida, ';') WITHIN GROUP(
                ORDER BY
                    if.valorreferencia ASC
            ) AS vantagens,
            ne.descricao   AS escolaridade
        FROM
            pessoafisica               pf
            INNER JOIN matriculafp                m ON m.pessoa_id = pf.id
            INNER JOIN vinculofp                  v ON m.id = v.matriculafp_id
            INNER JOIN fichafinanceirafp          ff ON v.id = ff.vinculofp_id
            INNER JOIN itemfichafinanceirafp      if ON ff.id = if.fichafinanceirafp_id
            INNER JOIN eventofp                   ev ON ev.id = if.eventofp_id
            INNER JOIN folhadepagamento           fp ON ff.folhadepagamento_id = fp.id
            INNER JOIN contratofp                 c ON v.id = c.id
            INNER JOIN cargo                      ca ON c.cargo_id = ca.id
            INNER JOIN lotacaofuncional           lf ON v.id = lf.vinculofp_id
            INNER JOIN unidadeorganizacional      und ON lf.unidadeorganizacional_id = und.id
            INNER JOIN hierarquiaorganizacional   horg ON und.id = horg.subordinada_id
            LEFT JOIN nivelescolaridade          ne ON pf.nivelescolaridade_id = ne.id
        WHERE
            if.mes = 7
            AND if.ano = 2019
            AND horg.descricao = 'Secretaria Municipal de Educação - SEME' 
            --AND ev.id = if.eventofp_id
    )
GROUP BY
    servidor,
    matricula,
    funcao,
    admissao,
    vatagens,
    escolaridade

这是错误:

ORA-00904: "VATAGENS": 标识符无效 00904. 00000 - "%s: 无效标识符” *原因: *操作:行错误:47 列:5

【问题讨论】:

  • 一个明显的问题:您的子查询(在GROUP BY 之前结束)没有别名。所有派生表都需要 Oracle 中的别名。
  • vatagens 列不在子查询中,但在外部查询中使用。在子查询列中是vantagens

标签: sql oracle


【解决方案1】:

请检查以下查询。

更改:列名vantagens 在外部查询中更正。

SELECT
    servidor,
    matricula,
    funcao,
    TO_CHAR(admissao, 'dd/mm/yyyy'),
    vantagens,
    escolaridade
FROM
    (
        SELECT DISTINCT
            pf.nome        AS servidor,
            m.matricula    AS matricula,
            ca.descricao   AS funcao,
            TO_CHAR(c.dataadmissao, 'dd/mm/yyyy') AS admissao,
            LISTAGG(if.valorreferencia
                    || '-'
                    || ev.descricaoreduzida, ';') WITHIN GROUP(
                ORDER BY
                    if.valorreferencia ASC
            ) AS vantagens,
            ne.descricao   AS escolaridade
        FROM
            pessoafisica               pf
            INNER JOIN matriculafp                m ON m.pessoa_id = pf.id
            INNER JOIN vinculofp                  v ON m.id = v.matriculafp_id
            INNER JOIN fichafinanceirafp          ff ON v.id = ff.vinculofp_id
            INNER JOIN itemfichafinanceirafp      if ON ff.id = if.fichafinanceirafp_id
            INNER JOIN eventofp                   ev ON ev.id = if.eventofp_id
            INNER JOIN folhadepagamento           fp ON ff.folhadepagamento_id = fp.id
            INNER JOIN contratofp                 c ON v.id = c.id
            INNER JOIN cargo                      ca ON c.cargo_id = ca.id
            INNER JOIN lotacaofuncional           lf ON v.id = lf.vinculofp_id
            INNER JOIN unidadeorganizacional      und ON lf.unidadeorganizacional_id = und.id
            INNER JOIN hierarquiaorganizacional   horg ON und.id = horg.subordinada_id
            LEFT JOIN nivelescolaridade          ne ON pf.nivelescolaridade_id = ne.id
        WHERE
            if.mes = 7
            AND if.ano = 2019
            AND horg.descricao = 'Secretaria Municipal de Educação - SEME' 
            --AND ev.id = if.eventofp_id
    )
GROUP BY
    servidor,
    matricula,
    funcao,
    admissao,
    vantagens,
    escolaridade

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多