[英]SQL merge two queries with multiple rows in one
我對一個視圖提出了兩個單獨的請求,每個結果都有幾行。 您可以看到結果的兩列之一是相同的。
我想知道如何合並這兩個查詢以獲得具有 3 列的單個表,即使某些結果是 NULL。 目的是將幾個結果分組以獲得一般的進度結果。
謝謝。
第一次查詢
SELECT appui.pa, COUNT(appui.gid) AS appui_non_lance
FROM genie_civil.v_appui appui
JOIN suivi.v_contour_aerien aer ON aer.id = appui.contour_etude
WHERE num_appui LIKE 'E%'
AND etat_appui != 'Non utilisé'
AND type_travaux != 'artère neuve'
AND avancement_etude_app = 'non renseigné'
AND date_envoi_pv IS NULL
AND date_retour_pv IS NULL
AND etat_pv = '--Non Renseigné--'
AND aer.date_depot_erdf IS NULL
AND aer.etat_etude_erdf = 'NC'
AND aer.etat_affaire IS NULL
AND date_com IS NULL
AND valid_com IS NULL
--AND date_envoi_executant_app IS NULL
AND date_retour_tvx_appui IS NULL
AND aer.etat_aat = '--Non renseigné--'
AND date_tfx IS NULL
AND valid_tfx IS NULL
AND aer.date_envoi_d2 IS NULL
GROUP BY appui.pa;
第二次查詢
SELECT appui.pa, COUNT(appui.gid) AS appui_en_releve
FROM genie_civil.v_appui appui
JOIN suivi.v_contour_aerien aer ON aer.id = appui.contour_etude
WHERE num_appui LIKE 'E%'
AND etat_appui != 'Non utilisé'
AND avancement_etude_app IN('à relever', 'en cours relevé', 'à contrôler relevé')
AND date_envoi_pv IS NULL
AND date_retour_pv IS NULL
AND etat_pv = '--Non Renseigné--'
AND date_com IS NULL
AND valid_com IS NULL
--AND date_envoi_executant_app IS NULL
AND date_retour_tvx_appui IS NULL
AND aer.date_depot_erdf IS NULL
AND aer.etat_etude_erdf ='NC'
AND aer.etat_affaire IS NULL
AND aer.etat_aat = '--Non renseigné--'
AND date_tfx IS NULL
AND valid_tfx IS NULL
AND aer.date_envoi_d2 IS NULL
GROUP BY appui.pa;
您可能正在尋找UNION ALL
。 更多信息在 Postgres 文檔中:
請使用以下查詢,
SELECT appui.pa, COUNT(appui.gid) AS appui_non_lance
FROM genie_civil.v_appui appui
JOIN suivi.v_contour_aerien aer ON aer.id = appui.contour_etude
WHERE num_appui LIKE 'E%'
AND etat_appui != 'Non utilisé' AND type_travaux != 'artère neuve' AND avancement_etude_app = 'non renseigné'
AND date_envoi_pv IS NULL AND date_retour_pv IS NULL AND etat_pv = '--Non Renseigné--'
AND aer.date_depot_erdf IS NULL AND aer.etat_etude_erdf = 'NC' AND aer.etat_affaire IS NULL
AND date_com IS NULL AND valid_com IS NULL
--AND date_envoi_executant_app IS NULL
AND date_retour_tvx_appui IS NULL AND aer.etat_aat = '--Non renseigné--' AND date_tfx IS NULL
AND valid_tfx IS NULL AND aer.date_envoi_d2 IS NULL
GROUP BY appui.pa
UNION ALL
SELECT appui.pa, COUNT(appui.gid) AS appui_en_releve FROM genie_civil.v_appui appui
JOIN suivi.v_contour_aerien aer ON aer.id = appui.contour_etude
WHERE num_appui LIKE 'E%'
AND etat_appui != 'Non utilisé' AND avancement_etude_app IN('à relever', 'en cours relevé', 'à contrôler relevé')
AND date_envoi_pv IS NULL AND date_retour_pv IS NULL AND etat_pv = '--Non Renseigné--' AND date_com IS NULL
AND valid_com IS NULL
--AND date_envoi_executant_app IS NULL
AND date_retour_tvx_appui IS NULL AND aer.date_depot_erdf IS NULL AND aer.etat_etude_erdf ='NC'
AND aer.etat_affaire IS NULL AND aer.etat_aat = '--Non renseigné--' AND date_tfx IS NULL
AND valid_tfx IS NULL AND aer.date_envoi_d2 IS NULL
GROUP BY appui.pa;
我認為您只是希望有兩個單獨的計數。 這種方法是最好的,因為您只掃描表一次。 我已將兩個查詢共有的條件移到where
子句中,而其他條件則是各自case
表達式的一部分。
SELECT appui.pa,
COUNT(CASE WHEN
type_travaux != 'artère neuve'
AND avancement_etude_app = 'non renseigné'
AND aer.date_depot_erdf IS NULL
AND aer.etat_etude_erdf = 'NC'
THEN 1 END) AS appui_non_lance,
COUNT(CASE WHEN
etat_appui != 'Non utilisé'
AND avancement_etude_app IN ('à relever', 'en cours relevé', 'à contrôler relevé')
THEN 1 END) AS appui_en_releve
FROM genie_civil.v_appui appui INNER JOIN suivi.v_contour_aerien aer
ON aer.id = appui.contour_etude
WHERE
num_appui LIKE 'E%'
AND etat_appui != 'Non utilisé'
AND etat_pv = '--Non Renseigné--'
AND date_envoi_pv IS NULL
AND date_retour_pv IS NULL
AND aer.etat_affaire IS NULL
AND date_com IS NULL
AND valid_com IS NULL
--AND date_envoi_executant_app IS NULL
AND aer.etat_aat = '--Non renseigné--'
AND date_tfx IS NULL
AND date_retour_tvx_appui IS NULL
AND valid_tfx IS NULL
AND aer.date_envoi_d2 IS NULL
GROUP BY appui.pa;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.