当我的sql查询返回结果时,它看起来像这样:
Driver Amount
A $120.00
A -$5.00
A $10.00
B $90.00
但是现在我被要求在查询结果中添加一列,以显示每个驱动程序的总数。所以它现在应该是这样的:
Driver Amount Subtotal
A $120.00 $125.00
A -$5.00 $125.00
A $10.00 $125.00
B $90.00 $90.00
可能的?
答案 0 :(得分:3)
使用窗口功能。
with cte as (
<your query here>
)
select cte.*,
sum(amount) over (partition by driver) as subtotal
from cte;
您可以将此逻辑直接合并到返回第一个结果的查询中。
答案 1 :(得分:0)
很抱歉,我无法为您提供完整的查询,但如果您使用的是MS SQL,以下链接可能有助于您完成GROUP BY和ROLLUP所需的工作。
https://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx
另一种方法是使用CTE(公用表表达式)
With cteName as (
Select DriverId,
Sum(DriverAmount) As TotalDriverAmount
FROM YourTable
GROUP BY DriverId
),
Select YourTable.DriverId, DriverAmount, cteName.TotalDriverAmount
FROM YourTable LEFT JOIN cteName ON(cteName.DriverId = YourTable.DriverId)
答案 2 :(得分:0)
SELECT T.DRIVER, T.AMOUNT, S.TOT [SUBTOTAL] FROM YOURTABLE T JOIN
(SELECT DRIVER, SUM(AMOUNT) TOT FROM YOURTABLE GROUP BY DRIVER ) S
ON T.DRIVER = S.DRIVER
这应该适用于任何MS-SQL版本。
答案 3 :(得分:0)
来自 https://www.sqlservercentral.com/Forums/Topic1541134-3412-1.aspx
这很容易,这要归功于2005年诞生的某些(Windowing)功能。
SELECT OrderNo
,Something
,Amount
,SubTotal = SUM(Amount) OVER (PARTITION BY OrderNo)
FROM #TestTable
ORDER BY OrderNo, Something
答案 4 :(得分:-2)
创建一个获取驱动程序ID,查询驱动程序数据和返回总计的函数,在查询中调用该函数
Select DriverId, Amount, func(driverId) as TotalAmount
FROM Table
function func(ID){
return(Select sum(amount) from table where driverid=ID);
}