Calendar SQL Server CE选择2个日期之间每年的员工职位计数
我有一个Calendar SQL Server CE选择2个日期之间每年的员工职位计数,calendar,sql-server-ce,gaps-and-islands,Calendar,Sql Server Ce,Gaps And Islands,我有一个Employees表,其中包含ID、PostID、StartDate、EndDate列 样本数据 ID PostID StartDate EndDate ---------------------------------------- 1 1 2005/15/08 null <---Null is still employed 2 2 2006/02/04 2006/08/06 3 1 2004/03/
Employees
表,其中包含ID、PostID、StartDate、EndDate列
样本数据
ID PostID StartDate EndDate
----------------------------------------
1 1 2005/15/08 null <---Null is still employed
2 2 2006/02/04 2006/08/06
3 1 2004/03/07 9999/12/31 <--- Can also be still Employed
4 2 2008/04/01 null
请注意,在2007年,EmployeeID=2 PostID=2
已被终止(Endate=2006/08/06
)
要返回特定PostID的总和吗
我曾经
SUM(CASE WHEN PostID=1 THEN 1 ELSE 0 END) HPMP,
SUM(CASE WHEN PostID=4 THEN 1 ELSE 0 END) HPN,
SUM(CASE WHEN PostID=6 THEN 1 ELSE 0 END) HPMW
获得特定职位
问题是,我需要在1990年到2012年间每年将其分组
重要提示:我正在使用SQL Server CE,无法使用脚本或存储过程
必须是select grouped by语句。首先,您需要一个年份表。有些数据库管理系统可以动态创建这些数据库。假设一个年份表有一个年份列,每年有一行,那么以下各项应该有效:
Select
y.Year,
e.PostID,
Count(*) As Total
From
Years y
Inner Join
Employees e
On y.Year >= Year(e.StartDate) And (y.Year <= Year(e.EndDate) Or e.EndDate Is Null)
Group By
y.Year,
e.PostID
Order By
1, 2
选择
y、 年,
e、 张贴,
将(*)计为总数
从…起
年复一年
内连接
雇员
年>=年(e.StartDate)和年(y.Year=年(GetDate())-5和年=年(e.StartDate)和
(y.Year谢谢Laurence。这非常有用。遗憾的是我必须有一个Year表。你可以用CTE动态生成它们,但我不确定SQL CE是否有它们。例如,SQL server也有一个未记录的表master..spt_值
,其中包含可以使用的0到2047之间的数字。请参见示例。我也不确定CE是否有它。
Select
y.Year,
e.PostID,
Count(*) As Total
From
Years y
Inner Join
Employees e
On y.Year >= Year(e.StartDate) And (y.Year <= Year(e.EndDate) Or e.EndDate Is Null)
Group By
y.Year,
e.PostID
Order By
1, 2
Select
y.Year,
p.PostID,
Count(e.ID) As Total
From
Years y
Cross Join
(Select Distinct PostID From Employees) p
Left Outer Join
Employees e
On
y.Year >= Year(e.StartDate) And
(y.Year <= Year(e.EndDate) Or e.EndDate Is Null) And
p.PostID = e.PostID
Group By
y.Year,
p.PostID
Order By
1, 2