按SQL Server中的食物类型总和

时间:2013-04-18 11:07:13

标签: sql-server sql-server-2008

我是SQL新手,我正在使用SQL Server 2008.

在我的数据库中,我有3个表

  1. Type
  2. Invoice
  3. Item
  4. 这是获取总金额的SQL命令:

    SELECT 
       tbl_type.type,
       ((tbl_item.price * qty) - (tbl_item.price * qty * discount)) as totalAfter,
       tbl_inv.dateInv
    FROM 
       tbl_type, tbl_item, tbl_inv 
    WHERE 
       tbl_inv.dateInv = '2013-03-26 00:00:00' 
       AND tbl_inv.id = tbl_item.id_invoice 
       AND tbl_type.id = tbl_item.id_type
    ORDER BY 
       tbl_inv.dateInv;
    

    因此,当我运行查询时,它将返回

    CHICKEN        46.000000    2013-03-26 00:00:00.000
    MEAT            3.000000    2013-03-26 00:00:00.000
    CHICKEN        69.000000    2013-03-26 00:00:00.000
    CHICKEN        46.000000    2013-03-26 00:00:00.000
    CHICKEN        69.000000    2013-03-26 00:00:00.000
    MEAT            4.500000    2013-03-26 00:00:00.000
    

    但是这样怎么办?

    CHICKEN       230.000000    2013-03-26 00:00:00.000
    MEAT            7.500000    2013-03-26 00:00:00.000
    

    我会收到错误

      

    列'tbl_item.price'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

    我在SQL中使用GROUP BY tbl_type.type

    感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

SELECT tbl_type.type,SUM((tbl_item.price * qty) - (tbl_item.price * qty * discount)) as totalAfter ,tbl_inv.dateInv
FROM tbl_type,tbl_item,tbl_inv 
WHERE tbl_inv.dateInv = '2013-03-26 00:00:00' AND tbl_inv.id=tbl_item.id_invoice AND tbl_type.id=tbl_item.id_type
Group by tbl_type.type,tbl_inv.dateInv
ORDER BY tbl_inv.dateInv,tbl_type.type;