[英]SQL query with dynamic condition
我的桌子在这个SQL Fiddle Link
场景:我有一个Customer
表(CustomerID,CustomerName)
和CustomerBills
表(客户 ID、账单日期、价值)
我也有一个Days
表(dayValue,Name)
值如 (30, '1 Month') (60, '2 Months') (90, '3 Months')。
我需要根据天表查询每个客户的账单总和
结果样本:
这是需要的报告
样本数据
CREATE TABLE tblAge
([AgeDays] int, [AgeName] varchar(400))
;
INSERT INTO tblAge
([AgeDays], [AgeName])
VALUES
(30, 'From 0 to 30 Days'),
(90, '3 Months'),
(180, '6 Months');
CREATE TABLE tblCustomer
([ID] int, [Name] varchar(400))
;
INSERT INTO tblCustomer
([id], [Name])
VALUES
(1, 'Cust 1'),
(2, 'Cust 2'),
(3, 'Cust 3');
CREATE TABLE tblBills
([ID] int, [billDate] Datetime,[Amount] decimal,[CustID] int)
;
INSERT INTO tblBills
([ID] , [billDate] ,[Amount] ,[CustID] )
VALUES
(1, '2020-12-01',200,1),
(2, '2022-01-01',500,3),
(3, '2021-04-05',300,2),
(4, '2020-01-01',500,3),
(5, '2021-01-01',500,1),
(6, '2021-11-01',500,2),
(7, '2021-08-01',500,3),
(8, '2021-09-01',500,2),
(9, '2021-07-01',500,1)
;
您可以在tblAge
表上使用LAG
来获取先前的年龄分组,然后根据该间隔简单地加入
SELECT
c.ID,
c.Name,
SUM(b.Amount)
FROM tblCustomer c
JOIN tblBills b ON b.CustId = c.ID
JOIN (
SELECT *,
PrevDays = LAG(AgeDays, 1, 0) OVER (ORDER BY AgeDays)
FROM tblAge
) a ON b.billDate >= DATEADD(day, a.AgeDays, GETDATE())
AND b.billDate < DATEADD(day, a.PrevDays, GETDATE());
GROUP BY
c.ID,
c.Name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.