>Emp
表中的当前数据:
EmpId Name RejEmpId DOJ DOL
----------------------------------------------------------
1 Name1 NULL 10-12-2014 12-06-2015
2 Name1 1 06-04-2016 24-12-2016
3 Name1 2 01-04-2017 NULL
4 Name2 NULL 22-12-2014 21-07-2015
5 Name2 4 10-04-2016 22-12-2016
6 Name3 NULL 10-05-2015 NULL
7 Name4 NULL 10-05-2015 NULL
我想获取自定义列(所有父级和子级 EmpId、实际 DOJ、实际 DOL(
EmpId Name RejEmpId DOJ DOL All
Parent
And
Child Actual Actual
EmpId DOJ DOL
1 Name1 NULL 10-12-2014 12-06-2015 1.2.3 10-12-2014 NULL
2 Name1 1 06-04-2016 24-12-2016 1.2.3 10-12-2014 NULL
3 Name1 2 01-04-2017 NULL 1.2.3 10-12-2014 NULL
4 Name2 NULL 22-12-2014 21-07-2015 4.5 22-12-2014 22-12-2016
5 Name2 4 10-04-2016 22-12-2016 4.5 22-12-2014 22-12-2016
6 Name3 NULL 10-05-2015 NULL 6 10-05-2015 NULL
7 Name4 NULL 10-05-2015 NULL 7 10-05-2015 NULL
8 Name5 NULL 12-06-2015 20-12-2016 8 12-06-2015 20-12-2016
如果我理解正确,您可以按如下方式查询:
对于连接,您可以使用Stuff,获取DOJ的第一个值,您可以使用SQL Server 2012 +中的FIRST_VALUE函数,同样,对于DOL,您可以使用LAST_VALUE函数,如下所示:
Select emp.EmpId, Emp.[Name], RejEmpId, emp.DOJ, DOL, concatStr as [AllParent and Child EmpId]
,FIRST_VALUE(DOJ) over(partition by emp.[Name] order by EmpId) as ActualDOJ
,LAST_VALUE(DOL) over(partition by emp.[Name] order by EmpId rows between current row and unbounded following) as AcualDOL
from #empdata emp
cross apply (
Select [Name], concatStr = stuff((select concat('.', EmpId) from #empdata e where e.[Name] = o.[Name] for xml path('')),1,1,'')
from #empdata o
group by [Name]
) c where emp.[Name] = c.[Name]
输出如下:
+-------+-------+----------+------------+------------+---------------------------+------------+------------+
| EmpId | Name | RejEmpId | DOJ | DOL | AllParent and Child EmpId | ActualDOJ | AcualDOL |
+-------+-------+----------+------------+------------+---------------------------+------------+------------+
| 1 | Name1 | NULL | 2014-12-10 | 2015-06-12 | 1.2.3 | 2014-12-10 | NULL |
| 2 | Name1 | 1 | 2016-04-06 | 2016-12-24 | 1.2.3 | 2014-12-10 | NULL |
| 3 | Name1 | 2 | 2017-04-01 | NULL | 1.2.3 | 2014-12-10 | NULL |
| 4 | Name2 | NULL | 2014-12-22 | 2015-07-21 | 4.5 | 2014-12-22 | 2016-12-22 |
| 5 | Name2 | 4 | 2016-04-10 | 2016-12-22 | 4.5 | 2014-12-22 | 2016-12-22 |
| 6 | Name3 | NULL | 2015-05-10 | NULL | 6 | 2015-05-10 | NULL |
| 7 | Name4 | NULL | 2015-05-10 | NULL | 7 | 2015-05-10 | NULL |
+-------+-------+----------+------------+------------+---------------------------+------------+------------+