Select 组中列的数据并放置在整个组的新列中

Select a column's data in a group and place in new column across entire group

我想 select 将一列的数据放入一个组中,然后将该数据放在组中每一行的自己的列中。

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

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",并且 FirstDateInEachGroup 将在具有相同 JobNum 的每一行中包含相同的数据。

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

谢谢!

我想你想要这样的东西:

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

只需使用min() window函数:

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