小编Thr*_*ian的帖子

麻烦使用ROW_NUMBER()OVER(PARTITION BY ...)

我正在使用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)

sql sql-server row-number sql-server-2008 gaps-and-islands

14
推荐指数
2
解决办法
15万
查看次数

动态修改时,Datagridview单元格值未更新

根据设计要求,用户无法直接编辑datagridview.它处于只读模式.当用户双击单元格时,datagridview的只读属性变为false,单元格接受键盘输入.但是,原始键盘输入需要在进入单元格之前进行格式化.所以,我拦截KeyPress事件如下:

private void dgw_keyPress(object sender, KeyPressEventArgs e)
 {
     e.Handled = true;
 }
Run Code Online (Sandbox Code Playgroud)

此时,单元格处于编辑模式和脏模式.然后我用不同的方法更新Value属性并调用dgw.Refresh()哪个应该在单元格上显示更新的值.但事实并非如此.它只会在当前单元格不脏并且不处于编辑模式时更新.如何在单元格仍处于编辑模式时强制显示更新后的值?

有任何想法吗?

.net c# datagridview winforms

5
推荐指数
2
解决办法
1万
查看次数

SQL Group By - 从单列生成多个聚合列

我想按公司和日期进行分组,并为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查询?任何形式的帮助表示赞赏!谢谢!

sql-server grouping aggregate count sql-server-2008

5
推荐指数
1
解决办法
1万
查看次数

将每月数据分解为每日数据

我有一家公司的预算数据,采用以下每月格式。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 天。如何确定每个月的实际天数并将其按上面所示的格式分解?

我很感激任何形式的帮助。谢谢!

t-sql sql-server-2008

3
推荐指数
1
解决办法
3086
查看次数

如何从单行创建多个行 - 规范化表

我对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

sql t-sql sql-server sql-server-2008

2
推荐指数
1
解决办法
9209
查看次数

构建事实表以获取SSAS中的度量

我的目标是建立一个事实表,用于推导SSAS中的度量.我正在建立的措施是"平均就业时间".该度量将部署在仪表板中,用户可以选择日历期并深入查看月,周和日.

这是事务数据的样子:

DeptID     EmployeeID   StartDate   EndDate
--------------------------------------------
001        123           20100101   20120101   
001        124           20100505   20130101
Run Code Online (Sandbox Code Playgroud)

我的Fact Table应该有哪些字段?我应该在哪些领域进行聚合?如何平均呢?任何形式的帮助表示赞赏.

ssas mdx measure

0
推荐指数
1
解决办法
1358
查看次数