Postgresql

使用左連接的 UNION SQL

  • December 7, 2021

我試圖用兩個查詢做 UNION,我收到 42601 錯誤。你能幫我了解如何解決它嗎? 在此處輸入圖像描述

程式碼 :

   SELECT Date_part('year', pr.data_chiusura)  AS anno,
      Date_part('month', pr.data_chiusura) AS mese,
      im.comune                            AS comune,
      provincia.descrizione                AS provincia,
      regione.descrizione                  AS regione,
      Count(pr.id_pratica)                 AS numero_domande,
      Sum(di.costo)                        AS costo_lavori,
      im.zona_sismica 
   FROM   pncs_pratica pr,
      pncs_immobile im,
      pncs_dichiarazione di,
      pncs_comune comune,
      pncs_provincia provincia,
      pncs_regione regione
   UNION ALL
   SELECT    Date_part('year', pr.data_chiusura)  AS anno,
         Date_part('month', pr.data_chiusura) AS mese,
         im.comune                            AS comune,
         provincia.descrizione                AS provincia,
         regione.descrizione                  AS regione,
         Count(dati_ante.id_dato_intervento)  AS numero_domande_ante,
         dati_ante.classe_rischio             AS cl_risc_ante,
         Avg(dati_ante.indice_pam)            AS avg_pam_ante,
         Avg(dati_ante.indice_isv)            AS avg_isv_ante,
         Count(dati_post.id_dato_intervento)  AS numero_domande_post,
         dati_post.classe_rischio             AS cl_risc_post,
         Avg(dati_post.indice_pam)            AS avg_pam_post,
         Avg(dati_post.indice_isv)            AS avg_isv_post
   FROM      pncs_pratica pr
   LEFT JOIN
         (
                SELECT *
                FROM   pncs_dati_intervento pdi
                WHERE  pdi.flag_ante = true) AS dati_ante
ON pr.id_pratica = dati_post.id_pratica,
pncs_immobile im,
pncs_dichiarazione di,
pncs_comune comune,
pncs_provincia provincia,
pncs_regione regione
--pncs_stato_pratica stpratica
WHERE pr.id_pratica = im.id_pratica
AND pr.id_pratica = di.id_pratica
AND im.cod_comune = comune.codice_istat
AND im.cod_provincia = provincia.codice
AND im.cod_regione = regione.codice
AND pr.data_chiusura IS NOT NULL
AND pr.id_stato_pratica = 3
AND pr.flag_rimosso IS false
--AND stpratica.descrizione = 'FIRMATA'
--and pr.id_stato_pratica = stpratica.id_stato_pratica

GROUP BY Date_part('year', pr.data_chiusura),
Date_part('month', pr.data_chiusura),
regione.descrizione,
provincia.descrizione,
im.comune,
im.zona_sismica
dati_ante.classe_rischio,
dati_post.classe_rischio

ORDER BY anno DESC,
mese DESC,
comune ASC
   

您在列GROUP BY後的子句中缺少逗號im.zona_sismica。你的GROUP BY條款應該是:

GROUP BY Date_part('year', pr.data_chiusura), Date_part('month', pr.data_chiusura), regione.descrizione, provincia.descrizione, im.comune, im.zona_sismica, dati_ante.classe_rischio, dati_post.classe_rischio

據我了解,在執行聯合操作時,我們需要在兩個表上使用相同的輸出列名。

SELECT City, Country FROM Customers
UNION
SELECT City, Country FROM Suppliers

您的查詢: 表 1 輸出列:

Date_part('year', pr.data_chiusura)  AS anno,
      Date_part('month', pr.data_chiusura) AS mese,
      im.comune                            AS comune,
      provincia.descrizione                AS provincia,
      regione.descrizione                  AS regione,
      Count(pr.id_pratica)                 AS numero_domande,
      Sum(di.costo)                        AS costo_lavori,

輸出列數:7

表 2 輸出列:

Date_part('year', pr.data_chiusura)  AS anno,
         Date_part('month', pr.data_chiusura) AS mese,
         im.comune                            AS comune,
         provincia.descrizione                AS provincia,
         regione.descrizione                  AS regione,
         Count(dati_ante.id_dato_intervento)  AS numero_domande_ante,
         dati_ante.classe_rischio             AS cl_risc_ante,
         Avg(dati_ante.indice_pam)            AS avg_pam_ante,
         Avg(dati_ante.indice_isv)            AS avg_isv_ante,
         Count(dati_post.id_dato_intervento)  AS numero_domande_post,
         dati_post.classe_rischio             AS cl_risc_post,
         Avg(dati_post.indice_pam)            AS avg_pam_post,
         Avg(dati_post.indice_isv)            AS avg_isv_post

輸出列數:13

引用自:https://dba.stackexchange.com/questions/303571