Requête SQL remplacer l'UNION de TOUS avec des JOINTURES ou quelque chose
Maintenant, j'ai 3 tables
Commandes:
ID | Date | Machine | Planification
GoodPieces:
ID | Date | Machine | Pièces | Produit
BadPieces:
ID | Date | Machine | Pièces | Produit | Composant
La sortie de la requête est
Date | Machine | Planification | GoodPieces | BadPieces
La requête réelle est quelque chose comme ça:
SELECT
data.Date AS Date,
data.Machine AS Machine,
SUM(CASE WHEN data.type = 'Planning' THEN data.value END ) AS Planning,
SUM(CASE WHEN data.type = 'GoodPieces' THEN data.value END ) AS GoodPieces,
SUM(CASE WHEN data.type = 'BadPieces' THEN data.value END ) AS BadPieces
FROM
( SELECT
'Planning' AS Type,
Date AS Date,
Machine AS Machine,
Planning AS Value
FROM Orders
UNION ALL
SELECT
'GoodPieces',
Date,
Machine,
Pieces AS Value
FROM GoodPieces
UNION ALL
SELECT
'BadPieces'
Date,
Machine,
Pieces AS Value
FROM BadPieces ) AS data
GROUP BY
Date,
Machine
Ma question est si il y a un moyen d'obtenir le même résultat avec cette 3 tables
Commandes:
ID | Date | Machine| Planification
GoodPieces:
N ° De Commande | Pièces | Produit
BadPieces:
N ° De Commande | Pièces | Produit | Composant
Merci,
Vous devez vous connecter pour publier un commentaire.
Sûr,
LEFT JOIN
dans les tableaux et additionner les colonnes appropriées:Démo: http://www.sqlfiddle.com/#!3/09a73/17
Modifier: mise à Jour pour gérer le point donné par
@MikaelEriksson
dans les commentaires.OrderID
est unique dansBadPieces
. Essayez d'ajouter (8, 1) pourBadPieces
. Le calcul pourBothTest
sera mauvais.GoodPieces
etBadPieces
parOrderID
dans les sous-requêtes. Maintenant, les données des matchs, même avec votre affaire ajoutée, testé requête originale ici: sqlfiddle.com/#!3/1698e/3UNION ALL
méthode aussi bien par rejoindre les Commandes données dans chaque sous-requête: sqlfiddle.com/#!3/09a73/21