【发布时间】:2018-02-11 10:11:31
【问题描述】:
是否可以使用 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
【问题讨论】:
-
请显示您的样本数据和预期结果,以便我们评估您的问题
-
希望现在有点清楚了。
标签: sql sql-server tsql lag lead