是否可以使用 Lag 从另一个表中选择和汇总项目并从另一个表中领先,范围如下。
SELECT @Last = MAX(ID) from [dbo].[#Temp]
select opl.Name as [Age Categories] ,
( SELECT count([dbo].udfCalculateAge([BirthDate],GETDATE()))
FROM [dbo].[tblEmployeeDetail] ed
inner join [dbo].[tblEmployee] e
on ed.EmployeeID = e.ID
where convert(int,[dbo].udfCalculateAge(e.[BirthDate],GETDATE()))
between LAG(opl.Name) OVER (ORDER BY opl.id)
and (CASE opl.ID WHEN @Last THEN '100' ELSE opl.Name End )
) as Total
FROM [dbo].[#Temp] opl
tblEmployee 包含员工及其出生日期
INSERT INTO @tblEmployees VALUES
(1, 'A', 'A1', 'A', '1983/01/02'),
(2, 'B', 'B1', 'BC', '1982/01/02'),
(3, 'C', 'C1', 'JR2', '1982/10/11'),
(4, 'V', 'V1', 'G', '1990/07/12'),
(5, 'VV', 'VV1', 'J', '1992/06/02'),
(6, 'R', 'A', 'D', '1982/05/15'),
(7, 'C', 'Ma', 'C', '1984/09/29')
下一个表是根据用户输入的年龄创建的临时表,例如“20;30;50;60”在下面生成一个临时表,使用函数拆分
select * FROM [dbo].[Split](';','20;30;50;60')
温度表
pn s
1 20
2 30
3 50
4 60
所需的输出如下,尽管列 Age Categories 可以在 C# 的数据表中重命名。l 需要总列在范围上是准确的。
Age Categories Total
up to 20 0
21 - 30 2
31 - 50 5
51 - 60 0