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 Tableau 1 P> 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.
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
3 Réponses :
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
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
Vous pouvez également utiliser résultats: p> pivot code>
opérateur:
Devrait probablement chercher ce que
union tout code> 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.