Je suis en train de mettre sur pied une requête qui me donne un rapport du nombre de ventes de produits et leur niveau de stock en 3 endroits distincts (branches de magasin)Pas sûr comment joindre des tables 3 fois pour obtenir le résultat souhaité
l'idée est de regrouper les résultats comme suit:
Prod. | Loc1 Sales | Loc1 Stk | Loc2 Sales | Loc2 Stk | Loc3 Sales | Loc3 Stk
Item 1 | 323 | 34 | 23 | 7 | 119 | 54
Item 2 | 653 | 566 | 84 | 45 | 476 | 3434
Item 3 | 121 | 23 | 300 | 5643 | 12 | 3434
je peux commencer en saisissant les produits et la qté d'un endroit:
SELECT col.productname, sum(col.quantity) as qty
FROM customerorderlines col
JOIN customerorders co
ON co.id = col.customerorder_id
WHERE co.orderdate BETWEEN 'start date here' AND 'end date here'
AND co.location_id = 1
GROUP BY product_id
ORDER BY qty DESC
résultat:
productname | qty
item 1 | 146
item 2 | 74
item 3 | 63
item 4 | 49
Maintenant, j'essaie de se joindre à la table des actions là-bas:
SELECT col.productname, sum(col.quantity) AS qty, sum(s.stocklevel) AS stocklevel
FROM customerorderlines col
JOIN customerorders co
ON co.id = col.customerorder_id
JOIN stock s
ON s.product_id = col.product_id
WHERE co.orderdate BETWEEN 'start date here' AND 'end date here'
AND co.location_id = 1
AND s.location_id = 1
GROUP BY col.product_id
ORDER BY qty DESC
Ceci, bien sûr, le travail ne marche pas:
productname | qty | stocklevel
item 1 | 246 | 89123
item 2 | 98 | 18454
item 3 | 78 | 22565
Non seulement les stocklevels mal, il ébouriffe up la quantité aussi. Pourtant, je sais que ce nest pas la façon d'écrire d'aller à ce sujet, alors j'essaie avec une jointure:
SELECT col.productname, sum(col.quantity) AS qty, sl.stocklevel
FROM customerorderlines col
JOIN (SELECT
product_id
,location_id
,SUM(stocklevel) AS stocklevel
FROM stock
GROUP BY product_id
) sl
ON sl.product_id = col.product_id
JOIN customerorders co
ON co.id = col.customerorder_id
JOIN stock s
ON s.product_id = col.product_id
WHERE co.orderdate BETWEEN 'start date here' AND 'end date here'
AND co.location_id = 1
AND s.location_id = 1
GROUP BY col.product_id
ORDER BY qty DESC
Avec cette jointure, qui fonctionne comme une requête sur elle-même, j'attends environ 8 minutes avant que je tue le processus parce qu'il se trouve juste là.
Des suggestions?
Merci à l'avance, Rob
Merci. Je vais donner à celui-ci un essai routier. J'ai essayé d'exécuter plusieurs sous-marins ensemble mais j'ai continué à obtenir une erreur 'l'opérande devrait contenir une colonne'. D'un simple coup d'œil, je n'arrivais pas à comprendre pourquoi. – prevailrob
@prevailrob: probablement parce que vous avez retourné plus d'une colonne dans les sous-requêtes scalaires :) – Quassnoi