2015-04-01 72 views
0

我想选择组中的列数据,并将该数据放置在组的每一行的自己的列中。选择组中的列数据并将其置于整个组的新列中

具体来说,如果我有一个表,如下所示:

SELECT * FROM Jobtable 
JOBNum | ReqDateTime    | RowNum 
-------+----------+------ 
M210 | 2015-01-08 17:01:56.000 | 1 
M214 | 2015-01-12 17:46:09.000 | 1 
M214 | 2015-01-16 20:19:43.000 | 2 
M219 | 2015-01-27 15:05:16.000 | 1 
M219 | 2015-01-28 02:01:13.000 | 2 

我想将此:

JOBNum | ReqDateTime    | FirstDateInEachGroup | Row |         
-------+-------------------------+-------------------------+-----+ 
M210 | 2015-01-08 17:01:56.000 | 2015-01-08 17:01:56.000 | 1 | 
M214 | 2015-01-12 17:46:09.000 | 2015-01-12 17:46:09.000 | 1 | 
M214 | 2015-01-16 20:19:43.000 | 2015-01-12 17:46:09.000 | 2 | 
M219 | 2015-01-27 15:05:16.000 | 2015-01-27 15:05:16.000 | 1 | 
M219 | 2015-01-28 02:01:13.000 | 2015-01-27 15:05:16.000 | 2 | 

我想动态创建另一列“FirstDateInEachGroup”这由每个JobNum组中的Row = 1的ReqDateTime组成。在上面的示例中,您可以看到有两个相同的JobNum,它们具有不同的“Row”,并且FirstDateInEachGroup在每个组中包含相同的数据行与相同的JobNum。

如何在不使用游标或函数的情况下执行此操作?

谢谢!

回答

1

我想你想是这样的:

SELECT 
    JobNum, ReqDateTime, RowNum, 
    (select min(ReqDateTime) from JobTable jt2 where jt2.JobNum = jt1.JobNum group by JobNum) as FirstDateInEachGroup 
FROM Jobtable jt1 
1

只需使用min()窗函数:

SELECT JobNum, ReqDateTime, 
     MIN(ReqDateTime) OVER (PARTITION BY JobNum) as FirstDateInEachGroup, 
     RowNum 
FROM Jobtable; 
相关问题