Requête SQL pour combiner les enregistrements en double et somme QTÉ
J'ai une feuille de calcul excel qui tire enregistrements à partir de SQL. Je veux combiner les enregistrements en double et la somme de la quantité champ d'enregistrement correspondant.
J'ai essayé d'ajouter un select(somme) et de groupe par commande à ma requête, mais je n'ai pas aller très loin comme je n'ai pas de réel SQL expérience.
Ma table ressemble à ceci:
item no.| item description | qty | date
1 red onion 5 20110405
2 yellow onion 5 20110406
1 red onion 10 20110405
et je veux qu'elle ressemble à ceci:
item no.| item description | qty | date
1 red onion 15 20110405
2 yellow onion 5 20110406
C'est la requête que j'utilise:
SELECT
OELINHST_SQL.item_no, OELINHST_SQL.item_desc_1, OELINHST_SQL.qty_ordered, oelinhst_sql.unit_weight, OEHDRHST_SQL.shipping_dt, OEHDRHST_SQL.inv_dt
FROM
OEHDRHST_SQL OEHDRHST_SQL,
OELINHST_SQL OELINHST_SQL
WHERE
OEHDRHST_SQL.ord_type *= OELINHST_SQL.ord_type AND
OEHDRHST_SQL.ord_no *= OELINHST_SQL.ord_no AND
(OELINHST_SQL.prod_cat <> '26' AND
OELINHST_SQL.prod_cat <> '25') AND
OELINHST_SQL.loc = 'fs2' AND
OELINHST_SQL.item_desc_1 IS NOT NULL AND
OEHDRHST_SQL.shipping_dt >= 20110101 AND
OELINHST_SQL.item_no NOT IN ('800-505-00', '800-083-00', '800-506-00', '400-511-39') AND (OELINHST_SQL.item_no NOT BETWEEN '800-000-00' AND '999-999-99')
ORDER BY
OELINHST_SQL.item_no ASC,
OEHDRHST_SQL.inv_dt DESC
Les termes que vous recherchez sont GROUP BY et SOMME
Vous êtes des données de l'échantillon fait ressembler vous avez un tableau, mais la requête est manifestement le référencement de deux tables. Pouvez-vous nous donner tous les détails de votre cas particulier?
La requête que vous avez n'ont pas les mêmes colonnes répertorié comme votre résultats indiquent. Il y a des colonnes supplémentaires. Aussi, il serait utile si vous avez compris ce que vous avez essayé lors de l'utilisation de la SOMME() et pourquoi il ne fonctionne pas pour vous. Avez-vous une erreur? De mauvais résultats? La SOMME() est presque certainement ce que vous devriez être en utilisant.
Désolé, ma table exact utilise ces champs:
Vous êtes des données de l'échantillon fait ressembler vous avez un tableau, mais la requête est manifestement le référencement de deux tables. Pouvez-vous nous donner tous les détails de votre cas particulier?
La requête que vous avez n'ont pas les mêmes colonnes répertorié comme votre résultats indiquent. Il y a des colonnes supplémentaires. Aussi, il serait utile si vous avez compris ce que vous avez essayé lors de l'utilisation de la SOMME() et pourquoi il ne fonctionne pas pour vous. Avez-vous une erreur? De mauvais résultats? La SOMME() est presque certainement ce que vous devriez être en utilisant.
Désolé, ma table exact utilise ces champs:
item_no | item_desc_1 | qty_ordered |unit_weight |shipping_dt |inv_d
puis-je ajouter un champ dans excel où je convertir sql date dans un format excel reconnaît. Avant, j'ai tenté d'utiliser la Somme et Group By SELECT OELINHST_SQL.item_no,OELINHST_SQL.item_desc_1, (SELECT sum(OELINHST_SQL.qty_ordered) FROM OELINHST_SQL group by OELINHST_SQL.item_no) FROM OELINHST_SQL
qui me donnait un "Sous-Requête ne peut pas retourner de plus de 1 valeur.." erreur.
OriginalL'auteur NX5 | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser un
GROUP BY
clause etSUM
la colonne correspondante.Voici un exemple simplifié qui peut être adapté à votre situation.
OriginalL'auteur Derek Kromm
Ressemble, vous devez ajouter une clause group by, et ajouter dans SUM(Qte) et MIN(date)
Pas trop sûr de vos noms de colonne, mais probablement quelque chose comme ceci:
OriginalL'auteur Jim B
Je pense que vous voulez quelque chose comme ceci:
Mais, cela suppose que la date d'expédition et int_date sera toujours la même chose ou que vous souhaitez les dates dans les deux cas.
OriginalL'auteur PaulStock
J'ai ajouté plus simple, les alias de table pour le rendre plus facile à lire. Fondamentalement, vous avez besoin de regrouper toutes les colonnes qui ne sont pas inclus dans une fonction d'agrégation.
Quel serait le but d'avoir inv_dt dans le jeu de résultats? Si il y a des valeurs différentes, qui choisiriez-vous pour une ligne donnée? La règle est, il doit être inclus dans le groupe, ou dans une fonction d'agrégation. Vous pouvez supprimer et ensuite utiliser un MIN(inv_dt) ou MAX(inv_dt) dans la requête. Espérons que ça aide! P. S. Si vous aimez ma réponse, veuillez upvote et à accepter. Merci!
OriginalL'auteur Rob Boek