繁体   English   中英

SQL 加入 3 个不同的查询

[英]SQL Join 3 Different Queries

我在下面有一个员工表:

员工姓名 生效日期 字段类型 字段值
特里 1991 年 1 月 1 日 标题 讲师
特里 1991 年 1 月 1 日 部门 LM
特里 1992 年 1 月 1 日 标题 高级讲师
欧文 1990 年 1 月 1 日 标题 行政人员
欧文 1990 年 1 月 1 日 部门 LM

我尝试了以下查询:

SELECT DISTINCT Employee.StaffName,  NameWithMaxDate.MaxDate
FROM Employee
INNER JOIN
(SELECT StaffName,
MAX(EffectiveDate) OVER (PARTITION BY StaffName) AS MaxDate
FROM Employee) AS NameWithMaxDate
ON Employee.StaffName = NameWithMaxDate.StaffName

我得到以下结果:

员工姓名 最大日期
欧文 1990 年 1 月 1 日
特里 1992 年 1 月 1 日

我还有一个疑问:

SELECT StaffName,FieldValue
FROM Employee
WHERE FieldType = 'Department'
AND FieldValue = 'LM'

结果如下:

员工姓名 字段值
特里 LM
欧文 LM

我有最后一个查询:

SELECT StaffName,FieldValue
FROM Employee
WHERE  FieldType = 'Title'

这是我得到的结果:

员工姓名 字段值
特里 讲师
特里 高级讲师
欧文 行政人员

我被困在如何结合上面的 3 个查询以获得我想要的结果,如下所示:

生效日期 员工姓名 标题 部门
1992 年 1 月 1 日 特里 高级讲师 LM
1990 年 1 月 1 日 欧文 行政 LM

也许我的 JOIN 概念还不够,或者在这种情况下我必须使用其他一些 SQL 函数吗?

谢谢

诀窍是通过Effective Date获取每个StaffNameFieldType的最后一条记录。 我们通过WITH TIES与 window function row_number()一起执行此操作

然后就变成了conditional aggregation的小事

示例或dbFiddle

Select EffectiveDate=max(EffectiveDate)
      ,StaffName
      ,Title      = max(case when FieldType='Title' then FieldValue end)
      ,Department = max(case when FieldType='Department' then FieldValue end)
 From  (
        Select top 1 with ties * 
         From  YourTable
         Order By row_number() over (partition by StaffName,FieldType Order by EffectiveDate desc)
      ) A
 Group By StaffName

结果

EffectiveDate   StaffName   Title               Department
1990-01-01      Owen        Administrator       LM
1992-01-01      Terry       Senior Instructor   LM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM