需要来自多个表的SUM的不同值

时间:2017-01-28 04:32:57

标签: sql xojo

我正在构建一个Xojo应用程序,并且遇到了我想要执行的查询的问题。

我需要导出保存在数据库中的说明书

它有3个表,一个包含页面,一个包含所需的项目和一个项目数据库

现在我需要从2个表中获得结果

PartsPerPage和Parts

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

零件

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

现在我想获得所有使用的项目的列表

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

我尝试了一些Sql查询,但没有成功

这只给了我一条记录,但应该是155条记录

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

当我只做一个简单的查询时,如果我做了记录计数,我会得到155条记录,但是没有得到结果

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

任何帮助都会很棒

2 个答案:

答案 0 :(得分:2)

据推测,你打算:

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;

需要GROUP BY,因为您有SUM()SUM()将您的查询转换为聚合查询 - 没有GROUP BY,只返回一行。

答案 1 :(得分:1)

您缺少GROUP BY子句

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;