簡體   English   中英

在一個請求中將多個具有不同條件的SELECT查詢合並到同一表中

[英]Combine Multiple SELECT queries with differents conditions in the same table in one request

我只需要在一個請求中合並幾個請求。 所有請求使用相同的表,但它們使用不同的條件。

  • 我嘗試使用“ UNION”關鍵字合並請求,但是,由於每個SELECT中的字段數都不相同,因此無法正常工作。
  • 我看一下“ JOIN”關鍵字,但看不到可以加入哪些字段

此請求的目的是在一行中獲取總和的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM