Postgresql
使用左連接的 UNION SQL
我試圖用兩個查詢做 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