Sql server 使用sum和group在SQL中进行查询

Sql server 使用sum和group在SQL中进行查询,sql-server,group-by,sum,max,Sql Server,Group By,Sum,Max,我想从多个表中选择多个数据,所以我使用join来获取这些数据,从这些数据中,我希望有一组代码,并有一组在一起的每个代码的总数量。我尝试将SUM()与MAX()和groupby一起使用 当不涉及求和、最大值和组时,我的数据结果如下所示: 查询是: SELECT DISTINCT t17.acctcode, (pcchrgamt) FROM hpatchrg AS t3 INNER JOIN hcharge AS t17 ON t3.chargcode = t17.chrgcode INN

我想从多个表中选择多个数据,所以我使用join来获取这些数据,从这些数据中,我希望有一组代码,并有一组在一起的每个代码的总数量。我尝试将
SUM()
MAX()
groupby
一起使用

当不涉及求和、最大值和组时,我的数据结果如下所示:

查询是:

SELECT DISTINCT 
t17.acctcode,
(pcchrgamt)  
FROM 
hpatchrg AS t3 INNER JOIN 
hcharge AS t17 ON t3.chargcode = t17.chrgcode INNER JOIN
Codes AS t14 ON t17.uacs = t14.accCode

WHERE acctno = '2007-000025486'
acctcode    pcchrgamt
613 RECORDS 56.00
613 RECORDS 60.00
631 CSR     56.00
631 CSR     60.00
631 CSR     74.00
631 CSR     88.40
643         2.00
643         3.00
643         4.00
643         6.00
643         8.75
643         10.00
643         11.40
643         39.75
643         40.00
643         41.60
643         44.00
643         47.10
643         49.00
643         50.50
643         80.00
643         80.50
643         88.00
643         96.00
643         100.00
643         106.35
643         109.95
643         132.00
643         192.00
643         878.50
643         2465.00
643         4930.00
acctcode    pcchrgamt
631 CSR         4454.40
613 RECORDS     1856.00
643             20813073.75
结果是:

SELECT DISTINCT 
t17.acctcode,
(pcchrgamt)  
FROM 
hpatchrg AS t3 INNER JOIN 
hcharge AS t17 ON t3.chargcode = t17.chrgcode INNER JOIN
Codes AS t14 ON t17.uacs = t14.accCode

WHERE acctno = '2007-000025486'
acctcode    pcchrgamt
613 RECORDS 56.00
613 RECORDS 60.00
631 CSR     56.00
631 CSR     60.00
631 CSR     74.00
631 CSR     88.40
643         2.00
643         3.00
643         4.00
643         6.00
643         8.75
643         10.00
643         11.40
643         39.75
643         40.00
643         41.60
643         44.00
643         47.10
643         49.00
643         50.50
643         80.00
643         80.50
643         88.00
643         96.00
643         100.00
643         106.35
643         109.95
643         132.00
643         192.00
643         878.50
643         2465.00
643         4930.00
acctcode    pcchrgamt
631 CSR         4454.40
613 RECORDS     1856.00
643             20813073.75
当我将
SUM
MAX
分组依据
放入时,代码如下所示:

SELECT DISTINCT 
t17.acctcode AS acctcode,
SUM(pcchrgamt) AS pcchrgamt  
FROM 
hpatchrg AS t3 INNER JOIN 
hcharge AS t17 ON t3.chargcode = t17.chrgcode INNER JOIN 
Codes AS t14 ON t17.uacs = t14.accCode

WHERE acctno = '2007-000025486'  
GROUP BY acctcode
结果是:

SELECT DISTINCT 
t17.acctcode,
(pcchrgamt)  
FROM 
hpatchrg AS t3 INNER JOIN 
hcharge AS t17 ON t3.chargcode = t17.chrgcode INNER JOIN
Codes AS t14 ON t17.uacs = t14.accCode

WHERE acctno = '2007-000025486'
acctcode    pcchrgamt
613 RECORDS 56.00
613 RECORDS 60.00
631 CSR     56.00
631 CSR     60.00
631 CSR     74.00
631 CSR     88.40
643         2.00
643         3.00
643         4.00
643         6.00
643         8.75
643         10.00
643         11.40
643         39.75
643         40.00
643         41.60
643         44.00
643         47.10
643         49.00
643         50.50
643         80.00
643         80.50
643         88.00
643         96.00
643         100.00
643         106.35
643         109.95
643         132.00
643         192.00
643         878.50
643         2465.00
643         4930.00
acctcode    pcchrgamt
631 CSR         4454.40
613 RECORDS     1856.00
643             20813073.75
分组是正确的,但总和太小了。我预计只有
613条记录的总和才是
116.00
,但这是远远不够的。我也尝试过使用子查询,但现在它出现了错误,我仍在处理它


我希望有人能指出查询中的错误。

一目了然,第二次查询中的
distinct
是否可以在
group by
之后处理?尝试将其移动到子查询:

SELECT  acctcode
,       SUM(pcchrgamt)
FROM    (
        SELECT  DISTINCT t17.acctcode
        ,       pcchrgamt
        FROM    hpatchrg AS t3
        JOIN    hcharge AS t17 ON t3.chargcode = t17.chrgcode
        JOIN    Codes AS t14 ON t17.uacs = t14.accCode
        WHERE   acctno = '2007-000025486'
        ) sub
GROUP BY
        acctcode

我刚试过你的代码,我想我得到了正确的总和。你能进一步解释一下我想了解你做了什么,还有什么是
sub
,如果有一些解释的话会很有帮助。这是因为
DISTINCT
只在计算了
sum
之后才应用,在
连接中的某个地方
会得到16个匹配项
sub
是子查询的名称。它未使用,但SQL Server需要它。尝试运行带有和不带有
distinct
的查询以查看差异。我想向上查询,但它说我不能。我现在只勾选它,当我可以解释时再向上查询。谢谢。@Manlapig:看起来你需要向上投票