我正在使用SQL Server 2008 R2.我有一个名为EmployeeHistory的表,其中包含以下结构和示例数据:
EmployeeID Date DepartmentID SupervisorID
10001 20130101 001 10009
10001 20130909 001 10019
10001 20131201 002 10018
10001 20140501 002 10017
10001 20141001 001 10015
10001 20141201 001 10014
Run Code Online (Sandbox Code Playgroud)
请注意,随着时间的推移,Employee 10001已经更改了2个部门和多个主管.我想要做的是列出按日期字段排序的每个部门中该员工的工作的开始和结束日期.所以,输出看起来像这样:
EmployeeID DateStart DateEnd DepartmentID
10001 20130101 20131201 001
10001 20131201 20141001 002
10001 20141001 NULL 001
Run Code Online (Sandbox Code Playgroud)
我打算使用以下查询对数据进行分区,但失败了.部门从001变为002然后又变回001.显然我不能通过DepartmentID进行分区......我确信我忽略了显而易见的事情.有帮助吗?先感谢您.
SELECT * ,ROW_NUMBER() OVER (PARTITION BY EmployeeID, DepartmentID
ORDER BY [Date]) RN FROM EmployeeHistory
Run Code Online (Sandbox Code Playgroud) 根据设计要求,用户无法直接编辑datagridview.它处于只读模式.当用户双击单元格时,datagridview的只读属性变为false,单元格接受键盘输入.但是,原始键盘输入需要在进入单元格之前进行格式化.所以,我拦截KeyPress事件如下:
private void dgw_keyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
此时,单元格处于编辑模式和脏模式.然后我用不同的方法更新Value属性并调用dgw.Refresh()哪个应该在单元格上显示更新的值.但事实并非如此.它只会在当前单元格不脏并且不处于编辑模式时更新.如何在单元格仍处于编辑模式时强制显示更新后的值?
有任何想法吗?
我想按公司和日期进行分组,并为2个单独的值生成计数列(Flag = Y和Flag = N).输入表如下所示:
Company Date Flag
------- ------- -----
001 201201 Y
001 201201 N
001 201202 N
001 201202 N
001 201202 Y
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
Company Date Count_Y Count_N
------- ------ ------- -------
001 201201 1 1
001 201202 1 2
Run Code Online (Sandbox Code Playgroud)
我该如何编写SQL查询?任何形式的帮助表示赞赏!谢谢!
我有一家公司的预算数据,采用以下每月格式。SqlFiddle 链接在这里。
Dept# YearMonth Budget($)
--------------------------
001 201301 100
001 201302 110
001 201303 105
.. ..... ...
002 201301 200
... ..... ...
Run Code Online (Sandbox Code Playgroud)
我需要将其分解为每日记录,如下所示:
Dept# Date Budget($)
--------------------------
001 20130101 xxx
001 20130102 xxx
001 20130103 xxx
.. ..... ...
Run Code Online (Sandbox Code Playgroud)
我需要从源表中的每条记录生成每日记录。我不想假设每个月有 30 天。如何确定每个月的实际天数并将其按上面所示的格式分解?
我很感激任何形式的帮助。谢谢!
我对SQL很新,并试图解决这个问题:
我有一个名为BUDGET的表,一年中每个月有12列,显示该月的预算余额.所以表格如下:
[Department] [Year] [Month1] [Month2] .... [Month12]
ABCD 2010 $5000 $5500 ..... $4000
ABCD 2011 $6000 $6500 ..... $3000
Run Code Online (Sandbox Code Playgroud)
我想要做的是规范化这个表并将每一行分成12行,每行都有一个日期字段,格式如下.我还希望有一个[Balance]列显示该月的值.因此,规范化表格如下所示:
[Department] [Date] [Balance]
ABCD 20100101 $5000
ABCD 20100201 $5500
ABCD 20100301 .....
ABCD ....... ......
Run Code Online (Sandbox Code Playgroud)
我尝试在同一个表上使用CROSS JOIN但是失败了.我也试过使用while循环,但也失败了.任何形式的帮助表示赞赏.谢谢!
编辑:我正在使用SQL Server 2008
我的目标是建立一个事实表,用于推导SSAS中的度量.我正在建立的措施是"平均就业时间".该度量将部署在仪表板中,用户可以选择日历期并深入查看月,周和日.
这是事务数据的样子:
DeptID EmployeeID StartDate EndDate
--------------------------------------------
001 123 20100101 20120101
001 124 20100505 20130101
Run Code Online (Sandbox Code Playgroud)
我的Fact Table应该有哪些字段?我应该在哪些领域进行聚合?如何平均呢?任何形式的帮助表示赞赏.
sql-server ×3
sql ×2
t-sql ×2
.net ×1
aggregate ×1
c# ×1
count ×1
datagridview ×1
grouping ×1
mdx ×1
measure ×1
row-number ×1
ssas ×1
winforms ×1