2017-01-28 7 views
2

Je crée une application Xojo et j'ai des problèmes avec une requête que je veux effectuer.Besoin de valeurs distinctes avec SUM à partir de plusieurs tables

J'ai besoin d'exporter un livre d'instructions qui est enregistré dans une base de données

Il dispose de 3 tables, l'une avec les pages, une avec les éléments nécessaires et une base de données de l'article

Pour l'instant, je dois obtenir les résultats de 2 tables

PartsPerPage et pièces

PartsPerPage

ID - SetID - Page - PartID - Parts 
1  - 1  - 1  - 37878 - 5 
2  - 1  - 1  - 23444 - 6 
3  - 1  - 1  - 34534 - 11 
4  - 1  - 2  - 37878 - 4 

Pièces

ID  - Name - Size - Image - Stock - ColorID - SortCode 
37878 - Blabla - 6  - picture - 56  - 12  - box1 
23444 - Blabla - 9  - picture - 12  - 11  - box1 
34534 - Blabla - 3  - picture - 66  - 101  - box2 
37878 - Blabla - 2  - picture - 33  - 4   - box5 

Maintenant, je veux obtenir une liste de tous les éléments qui sont utilisés

ID  - Parts - Name  - Size - Image - ColorID 
37878 - 9  - Blabla - 6  - Picture - 12 
23444 - 6  - Blabla - 9  - Picture - 11 
34534 - 11  - Blabla - 3  - Picture - 101 

J'ai essayé certaines requêtes Sql mais sans aucun succès

Celui-ci me donnai un seul enregistrement, mais devrait être comme 155 enregistrements

SELECT DISTINCT 
    PartsPerPage.PartID, 
    SUM(PartsPerPage.Parts), 
    Parts.Name, 
    Parts.Discription, 
    Parts.Size, Parts.image, 
    Parts.ColorID 
FROM PartsPerPage JOIN Parts ON Parts.ID = PartsPerPage.PartID 
WHERE PartsPerPage.SetID = 1 

Quand je fais juste une simple requête, je vais 155 dossiers si je fais un compte d'enregistrement, mais pas obtenir les résultats

SELECT DISTINCT 
    PartsPerPage.PartID 
FROM PartsPerPage 
WHERE PartsPerPage.SetID = 1 

Toute aide serait grande

Répondre

2

Il vous manque GROUP BY clause

SELECT 
    PartsPerPage.PartID, 
    SUM(PartsPerPage.Parts), 
    Parts.Name, 
    Parts.Discription, 
    Parts.Size, Parts.image, 
    Parts.ColorID 
FROM PartsPerPage JOIN Parts ON Parts.ID = PartsPerPage.PartID 
WHERE PartsPerPage.SetID = 1 
GROUP BY PartsPerPage.PartID; 
+0

Cela a fait l'affaire, Merci – Berry

+0

Soyez sûr de marquer cela comme la réponse, alors. –

1

on peut supposer que vous avez l'intention:

SELECT ppp.PartID, 
     SUM(PartsPerPage.Parts), 
     p.Name, p.Discription, p.Size, p.image, p.ColorID 
FROM PartsPerPage ppp JOIN 
    Parts p 
    ON p.ID = ppp.PartID 
WHERE ppp.SetID = 1 
GROUP BY ppp.PartID, p.Name, p.Discription, p.Size, p.image, p.ColorID; 

Le GROUP BY est nécessaire car vous avez un SUM(). Le SUM() transforme votre requête en une requête d'agrégation - sans GROUP BY, exactement une ligne est retournée.

+0

@GurV. . . Je vous remercie. –