我有一个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
正确的结果将是
Year Post Total
2004 1 1
2005 1 2
2006 1 2
2006 2 1
2007 1 2
2007 2 0
2008 1 2
2008 2 1
请注意,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,无法使用脚本或存储过程。
必须是按语句分组的选择。
答案 0 :(得分:1)
首先,你需要一张年份表。一些DBMS有办法在运行中创建这些。假设年份表具有年份列,并且每年一行,那么以下内容应该起作用:
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
您可以添加where子句来限制年份范围。例如其中y.Year&gt; =年(GetDate()) - 5和y.Year&lt; =年(GetDate())
如果你想包括零:
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
如果您有帖子表,则使用此表而不是选择不同位