0
votes

Combinez des colonnes des tables dans une table unique

J'ai quatre tables avec des données que je souhaite mettre les colonnes totales respectives de chacune dans une colonne différente. Cependant, je voudrais faire correspondre sur revendeur code>. Donc, s'il y a un revendeur de revendeur dans le tableau 1 et 3 qui sont les mêmes, ils doivent être une rangée unique.

Tableau 1 P>

SELECT *
FROM
(
SELECT o.DealerId, Sum(oi.Amount) as T1_Total
FROM ....
) AS T1
UNION ALL
SELECT *
FROM
(
SELECT o.DealerId, Sum(oi.Amount) as T2_Total
FROM ....
) AS T2
UNION ALL
...
-- repeat for T3 and T4


2 commentaires

Devrait probablement chercher ce que union tout fait.


@Eric qui peut être. Et je l'ai fait avant cela, mais je ne savais pas comment passer de ce que je voulais faire.


3 Réponses :


2
votes

Essayez de faire quelque chose comme ceci:

  with all_dealer_ids AS (
    SELECT DISTINCT dealerId
    FROM Table1 
    UNION 
    SELECT DISTINCT dealerId
    FROM Table2
    UNION
    SELECT DISTINCT dealerId
    FROM Table3
    UNION
    SELECT DISTINCT dealerId
    FROM Table4 
  )

  SELECT adi.dealerId, SUM(t1.TotalAmount) As T1TotalAmount, SUM(t2.TotalAmount) As 
    T2TotalAmount, SUM(t3.TotalAmount) AS T3TotalAmount, SUM(t4.TotalAmount) AS T4TotalAmount
  FROM all_dealer_ids adi
  LEFT JOIN Table1 t1
    ON adi.dealerId = t1.dealerId
  LEFT JOIN Table2 t2
    ON adi.dealerId = t2.dealerId
  LEFT JOIN Table3 t3
    ON adi.dealerId = t3.dealerId
  LEFT JOIN Table4 t4
    ON adi.dealerId = t4.dealerId
  GROUP BY adi.dealerId
  ORDER BY adi.dealerId ASC


0 commentaires

0
votes

vous voudrez utiliser JOINT au lieu d'union pour accomplir ce que vous recherchez. Les syndicats sont généralement utilisés pour empiler des données, c'est pourquoi vous voyez toutes vos données dans une colonne. Vous pouvez essayer quelque chose comme ça pour accomplir ce que vous recherchez.

SELECT COALESCE(t1_totals.dealerID, t2_totals.dealerID, t3_totals.dealerID, t4_totals.dealerID) AS dealerId
     , t1_totals.t1_total_amount
     , t2_totals.t2_total_amount
     , t3_totals.t3_total_amount
     , t4_totals.t4_total_amount
    FROM (
       SELECT dealerID, sum(amount) AS t1_total_amount FROM t1 GROUP BY t1.dealerID
     ) AS t1_totals
    FULL JOIN (
       SELECT dealerID, sum(amount) AS t2_total_amount FROM t2 GROUP BY t2.dealerID
     ) AS t2_totals
         ON t2_totals.dealerID = t1_totals.dealerID
    FULL JOIN (
       SELECT dealerID, sum(amount) AS t3_total_amount FROM t3 GROUP BY t3.dealerID
     ) AS t3_totals
         ON t3_totals.dealerID = t1_totals.dealerID
    FULL JOIN (
       SELECT dealerID, sum(amount) AS t4_total_amount FROM t4 GROUP BY t4.dealerID
     ) AS t4_totals
         ON t4_totals.dealerID = t1_totals.dealerID
ORDER BY dealerId


0 commentaires

2
votes

Vous pouvez également utiliser pivot opérateur: xxx

résultats: xxx < / p>


0 commentaires