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;
我想 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;