选择一个组中的列数据,并将其放在整个组中的新列中

时间:2015-04-01 20:56:22

标签: sql sql-server-2008-r2

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

具体来说,如果我有一个看起来像这样的表:

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组中的ReqDateTime由Row = 1组成。在上面的例子中,您可以看到有两个JobNum相同的地方,它们有不同的" Row& #34;和FirstDateInEachGroup将在每一行中包含相同的JobNum数据。

如何在不使用光标或功能的情况下执行此操作?

谢谢!

2 个答案:

答案 0 :(得分: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 :(得分:1)

只需使用min()窗口功能:

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