SQL / Microsoft Access查询问题

时间:2017-09-20 16:37:52

标签: sql ms-access

CNum  DNum  RNum  Quant  Price
C100  D1    R10   2      8.99
C100  D1    R40   7      9.99
C200  D3    R10   4      16.99
C200  D3    R20   2      15.99
C200  D3    R30   2      17.99
C200  D3    R40   5      19.99
C200  D3    R50   6      18.99
C200  D3    R60   4      19.99
C200  D3    R70   8      15.99
C200  D5    R20   1      8.99
C300  D3    R10   2      16.99
C300  D4    R20   5      22.99
C400  D6    R30   3      4.99
C400  D6    R70   3      2.99
C500  D1    R40   1      9.99
C500  D2    R20   2      23.99
C500  D2    R40   1      24.99
C500  D3    R40   2      19.99
C500  D4    R40   8      23.99
C500  D5    R40   4      8.99
C500  D5    R50   5      8.99
C500  D5    R70   1      9.99
C500  D6    R20   2      1.99
C500  D6    R40   5      3.99  

上表是名称订单。我试图解决的查询被称为“对于从餐馆订购的每道菜,获得菜肴编号(DNum),餐馆编号(RNum)和总数量(从该餐厅订购的菜肴)。”我可以填充两个数字,但我完全不确定如何将数量加起来,我尝试过的任何东西都只是总计了数量。有什么想法吗?

这是我尝试过的一个查询。这实际上返回了一个错误:“您的查询不包含指定表达式'DNum'作为聚合函数的一部分。'

SELECT Ord1.DNum, Ord2.DNum, SUM(Ord1.Quant + Ord2.Quant) AS TotQuant
FROM Orders AS Ord1, Orders AS Ord2
WHERE (Ord1.RNum = Ord2.RNum)

另一个不起作用

SELECT Order1.DNum, Order2.DNum, TotQuant
FROM  (SELECT SUM(Order1.Quant + Order2.Quant) AS TotQuant 
                                   FROM Orders AS Order1, Orders AS Order2
                                   WHERE (Order1.RNum = Order2.RNum)
                                   AND (Order1.DNum = Order2.DNum))

还有一个

SELECT DISTINCT Ord1.DNum, SUM(Ord1.Quant + Ord2.Quant) AS TotQuant
FROM Orders AS Ord1, Orders AS Ord2
WHERE (Ord1.RNum = Ord2.RNum)
AND (Ord1.DNum = Ord2.DNum)

2 个答案:

答案 0 :(得分:2)

如果我对你要做的事情的猜测是正确的,那么应该让你接近:

{{1}}

答案 1 :(得分:1)

好的,快速评论一下你的尝试:

查询1

SELECT Ord1.DNum, Ord2.DNum, SUM(Ord1.Quant + Ord2.Quant) AS TotQuant
FROM Orders AS Ord1, Orders AS Ord2
WHERE (Ord1.RNum = Ord2.RNum);

这看起来似乎应该有用,但如果你考虑一下,它就是一个毫无意义的查询。您正在选择两个相同的DNum值和SUM两个相同的Quant值。一个人可能能够理解你要求计算机做什么,但计算机很困惑。

查询2 查询3 将无法正常工作,主要是因为它们与返回的初始查询和错误类似。它们略有不同,但基本上你要求的是错误的东西。

现在,您可以尝试:

介绍GROUP BY方法!哇噢!

GROUP BY非常适合这个以及其他许多问题!正如w3schools页面上所述:

  

GROUP BY语句通常与聚合函数一起使用(COUNT,   MAX,MIN,SUM,AVG)将结果集分组为一列或多列。

这样的查询:

SELECT Orders.DNum, Orders.RNum, sum(Orders.Quant) as OrderQuantity
FROM Orders
GROUP BY (Orders.DNum, Orders.RNum);

稍微解构一下:

  1. 这将选择您要显示的列,以及您想要总和的Orders.Quant列的聚合。
  2. 然后,您按DNum分组,然后按RNum分组,以获得您要查找的金额。
  3. 希望它有所帮助!