在这种情况下如何使用SUM?

时间:2018-08-26 14:07:31

标签: sql sql-server

我有下表和它们的模式:

INV

id, product code, name, ucost, tcost, desc, type, qoh

1,123,CPASS 700,1.00,5.00,CPASS 700 Lorem, COM,5
2,456,Shelf 5,2.00,6.00,Shelf 5 KJ, BR,3

GRP

id,type,desc

1,COM,COMPASS
2,BR,SHELF 

目前,我有这样的查询:

SELECT INV.*,GRP.DESCR AS CATEGORY 
FROM INV LEFT JOIN GRP ON INV.TYPE = GRP.TYPE 
WHERE INV.QOH = 0

该查询没有问题。

现在,我想知道每个QOH为0的INV记录的TCOST的总和。

在这种情况下,我是说我要做的就是写一个单独的查询,如下所示:

SELECT SUM(TCOST)
FROM INV
WHERE QOH = 0 

尝试将这两个查询合并为一个对我来说有意义吗?

3 个答案:

答案 0 :(得分:0)

嗯,您可能会使用相关查询,尽管我不确定这是最好的方法,因为我不确定我是否了解您的尝试:

SELECT INV.*,
       GRP.DESCR AS CATEGORY ,
       (SELECT SUM(TCOST) FROM INV WHERE QOH=0) as your_sum
FROM INV LEFT JOIN GRP ON INV.TYPE = GRP.TYPE 
WHERE INV.QOH = 0

答案 1 :(得分:0)

如果您只想为sum()提供一个值,那么查询就可以了。如果要使用总和作为新列,请使用窗口函数:

SELECT INV.*, GRP.DESCR AS CATEGORY,
       SUM(INV.TCOST) OVER () as sum_at_zero
FROM INV LEFT JOIN
     GRP
     ON INV.TYPE = GRP.TYPE 
WHERE INV.QOH = 0;

通过在第一行中添加一行来组合查询是没有意义的,因为各列之间存在很大差异。 SQL结果集要求所有行都具有相同的列。

答案 2 :(得分:0)

首先了解SUM是聚合函数,因此您可以像这样运行Query (SELECT SUM(TCOST) FROM INV WHERE QOH=0) as total 对于提到的条件,这将返回Sum of TCOST in INV Table

另一种方法是根据某列(例如“类型”)找到总和

您可以编写

这样的查询

SELECT Type , SUM(TCOST) FROM INV WHERE QOH=0 GROUP BY type ;

尚不清楚您要总结什么条件。但是我认为以上两种方法都可以为您提供票价提示。