如何使用JOIN和SUM函数计算查询返回列的总数?

Aab*_*aby 3 join sql-server query sum

我跑了咆哮查询;

询问:

SELECT  j.jobId,
        j.productId,
        p.productUnitPrice
FROM    JobRequiredProducts J
JOIN    Product p
  ON    p.productId = j.productId
WHERE   j.jobId = 1
ORDER BY j.jobId
Run Code Online (Sandbox Code Playgroud)

并得到了以下结果;

查询结果:

jobId | productId | unitPrice 
_____________________________
  1   |     4     |   175.99
  1   |     5     |   100.00
  1   |     6     |   125.00
Run Code Online (Sandbox Code Playgroud)

现在,我想计算所有 unitPrice 以获得总数。我期望的结果是;

期待结果:

jobId | productId | Total
____________________________
  1   |     4     |   175.99
  1   |     5     |   100.00
  1   |     6     |   125.00
 null |    null   |   400.99
Run Code Online (Sandbox Code Playgroud)

因此,下面是我尝试过的查询;

我试过的查询:

SELECT  j.jobId,
        j.productId,
        SUM(p.productUnitPrice) AS 'Total'
FROM    JobRequiredProducts J
JOIN    Product p
  ON    p.productId = j.productId
WHERE   j.jobId = 1 
GROUP BY j.jobId,j.productId WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

但它没有给我预期的结果,我哪里出错了,我必须做些什么才能得到我预期的结果?

Sab*_*n B 8

您也可以使用分组集

declare @JobRequiredProducts table (jobId int, productId int);
declare @Product table(productId int, productUnitPrice decimal(8,2))

insert into @JobRequiredProducts(jobId,productId)
values(1,4),(1,5),(1,6);

insert into @Product(productId, productUnitPrice)
values(4,175.99),(5 ,100.00),( 6 , 125.00)


SELECT  j.jobId,
        j.productId,
        SUM(p.productUnitPrice) AS 'Total'
FROM    @JobRequiredProducts J
JOIN    @Product p
  ON    p.productId = j.productId
WHERE   j.jobId = 1 
GROUP BY  ROLLUP ((j.jobId, j.productId));
Run Code Online (Sandbox Code Playgroud)

带分组集

SELECT  j.jobId,
        j.productId,
        SUM(p.productUnitPrice) AS 'Total'
FROM    @JobRequiredProducts J
JOIN    @Product p
  ON    p.productId = j.productId
WHERE   j.jobId = 1 
GROUP BY  GROUPING SETS( (j.jobId, j.productId),());
Run Code Online (Sandbox Code Playgroud)

输出:

jobId   productId   Total
1       4           175.99
1       5           100.00
1       6           125.00
NULL    NULL        400.99
Run Code Online (Sandbox Code Playgroud)

dbfiddle在这里