[英]Combine Multiple SELECT queries with differents conditions in the same table in one request
我只需要在一個請求中合並幾個請求。 所有請求使用相同的表,但它們使用不同的條件。
此請求的目的是在一行中獲取總和的20個結果,以填充UI中的表格,並避免后面的代碼中出現倍數請求。
有沒有辦法做到這一點 ?
這是我對此要求的測試之一
SELECT IFNULL(SUM(CASE WHEN RecepPoste_id = 1 THEN Nombreplis END),0) AS NbrTSAPetits,
IFNULL(SUM(CASE WHEN RecepPoste_id = 2 THEN NombrePlis END),0) AS NbrTSAGrands,
IFNULL(SUM(CASE WHEN RecepPoste_id = 3 THEN NombrePlis END),0) AS NbrRecommandes,
IFNULL(SUM(CASE WHEN RecepPoste_id = 4 THEN NombrePlis END),0) AS NbrChronoBAL,
IFNULL(SUM(CASE WHEN RecepAccueil_id = 1 THEN Poids END),0) AS PoidsTotal,
IFNULL(SUM(CASE WHEN RecepAccueil_id = 1 THEN NombrePlis END),0) AS PlisTheoriques FROM datas WHERE Chantier_id = 1
UNION
SELECT IFNULL(SUM(CASE WHEN Scenario_id = 1 THEN NombrePlis END),0) AS NbrARR,
IFNULL(SUM(CASE WHEN Scenario_id = 2 THEN NombrePlis END),0) AS NbrSOR,
IFNULL(SUM(CASE WHEN Scenario_id = 3 THEN NombrePlis END),0) AS NbrTRT FROM datas WHERE Chantier_id = 2
UNION
SELECT IFNULL(SUM(NombrePlis),0) FROM Datas WHERE chantier_id = 3
UNION
SELECT IFNULL(SUM(CASE WHEN Reliquat_id = 1 THEN Poids END),0) AS NbrARRNP,
IFNULL(SUM(CASE WHEN Reliquat_id = 2 THEN Poids END),0) AS NbrSTNP,
IFNULL(SUM(CASE WHEN Reliquat_id = 3 THEN NombreLots END),0) AS NbrARR,
IFNULL(SUM(CASE WHEN Reliquat_id = 4 THEN NombreLots END),0) AS ST,
IFNULL(SUM(CASE WHEN Reliquat_id = 5 THEN NombreLots END),0) AS NbrCLASS,
IFNULL(SUM(CASE WHEN Reliquat_id = 6 THEN NombreLots END),0) AS NbrINDEX FROM datas WHERE Chantier_id = 4
UNION
SELECT IFNULL(SUM(CASE WHEN Retour_id = 1 THEN NombrePlis END),0) AS RETPapier,
IFNULL(SUM(CASE WHEN Retour_id = 2 THEN NombrePlis END),0) AS Divers,
IFNULL(SUM(CASE WHEN Retour_id = 3 THEN NombrePlis END),0) AS DTRSA,
IFNULL(SUM(CASE WHEN Retour_id = 4 THEN NombrePlis END),0) AS Originaux FROM datas WHERE Chantier_id = 5)
WHERE caf_id = 1;
我需要為每個請求指定chantier_id
謝謝您的幫助!
在所有查詢中具有相同列數的最簡單方法。 您可以使用null“填充”某些查詢中的列:
SELECT a, b, c FROM tableA
union all
SELECT d, e, null FROM tableB
因此,即使第二個查詢只有2個“實際”列,整個查詢也將起作用。
另一件事,您可能想使用並集ALL而不是並集。 可能不太可能,但是使用並集將對不同的查詢做出不同的區分。 因此,如果來自不同查詢的行相同,則將其刪除。
最后,我找到了這個解決方案:
SELECT IFNULL(SUM(CASE WHEN RecepPoste_id = 1 AND chantier_id = 1 THEN Nombreplis END),0) AS NbrTSAPetits, --1
IFNULL(SUM(CASE WHEN RecepPoste_id = 2 AND chantier_id = 1 THEN NombrePlis END),0) AS NbrTSAGrands, --2
IFNULL(SUM(CASE WHEN RecepPoste_id = 3 AND chantier_id = 1 THEN NombrePlis END),0) AS NbrRecommandes, --3
IFNULL(SUM(CASE WHEN RecepPoste_id = 4 AND chantier_id = 1 THEN NombrePlis END),0) AS NbrChronoBAL, --4
IFNULL(SUM(CASE WHEN RecepAccueil_id = 1 AND chantier_id = 1 THEN Poids END),0) AS PoidsTotal, --5
IFNULL(SUM(CASE WHEN RecepAccueil_id = 1 AND chantier_id = 1 THEN NombrePlis END),0) AS PlisTheoriques, --6
IFNULL(SUM(CASE WHEN Scenario_id = 1 AND chantier_id = 2THEN NombrePlis END),0) AS NbrARR, --7
IFNULL(SUM(CASE WHEN Scenario_id = 2 AND chantier_id = 2 THEN NombrePlis END),0) AS NbrSOR, --8
IFNULL(SUM(CASE WHEN Scenario_id = 3 AND chantier_id = 2 THEN NombrePlis END),0) AS NbrTRT, --9
IFNULL(SUM(CASE WHEN chantier_id = 3 THEN NombrePlis END),0) AS NbrPlisNumerise, --10
IFNULL(SUM(CASE WHEN Reliquat_id = 1 AND chantier_id = 4 THEN Poids END),0) AS NbrARRNP, --11
IFNULL(SUM(CASE WHEN Reliquat_id = 2 AND chantier_id = 4 THEN Poids END),0) AS NbrSTNP, --12
IFNULL(SUM(CASE WHEN Reliquat_id = 3 AND chantier_id = 4THEN NombreLots END),0) AS NbrARR, --13
IFNULL(SUM(CASE WHEN Reliquat_id = 4 AND chantier_id = 4THEN NombreLots END),0) AS ST, --14
IFNULL(SUM(CASE WHEN Reliquat_id = 5 AND chantier_id = 4THEN NombreLots END),0) AS NbrCLASS, --15
IFNULL(SUM(CASE WHEN Reliquat_id = 6 AND chantier_id = 4THEN NombreLots END),0) AS NbrINDEX, --16
IFNULL(SUM(CASE WHEN Retour_id = 1 THEN NombrePlis END),0) AS RETPapier, --17
IFNULL(SUM(CASE WHEN Retour_id = 2 AND chantier_id = 5THEN NombrePlis END),0) AS Divers, --18
IFNULL(SUM(CASE WHEN Retour_id = 3 AND chantier_id = 5THEN NombrePlis END),0) AS DTRSA, --19
IFNULL(SUM(CASE WHEN Retour_id = 4 AND chantier_id = 5THEN NombrePlis END),0) AS Originaux --20
FROM Datas WHERE caf_id = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.