在我的主要查询中,我得到每个日期每个客户的费用,如下所示:
10.00 - James - 01/01/2018
30.00 - John - 15/05/2018
所以我的日期过滤器如下*:
where DATEcolumn >='01/01/2018'
and DATEcolumn <='30/06/2018'
然后我想要一个函数根据我的日期范围给我这些费用的总和。结果如下:
10.00 - James - 01/01/2018 - 40.00
30.00 - John - 15/05/2018 - 40.00
我知道我可以通过子查询来获取,但是不幸的是我需要通过一个函数来获取,因为我使用的应用程序有局限性。我所要求的可能无法实现,但以为我会要求。谢谢
*抱歉,我在解释DATE列时出错。这是一个日期列,而不是两个。
答案 0 :(得分:2)
使用内联表值函数:
CREATE FUNCTION dbo.ufnCostByRanges (
@DateFrom DATE,
@DateTo DATE)
RETURNS TABLE RETURN
SELECT
P.Price,
P.Name,
P.Date,
TotalPrice = SUM(P.Price) OVER ()
FROM
Prices AS P
WHERE
P.Date BETWEEN @DateFrom AND @DateTo
您将其用于:
SELECT
P.*
FROM
dbo.ufnCostByRanges ('2018-01-01', '2018-05-01') AS P
答案 1 :(得分:0)
您似乎想要:
select t.*,
sum(case when dateFrom >= '2018-01-01' and dateTo <= '2018-06-30'
then costs else 0
end)
from t;