Sql server 2005 SQL Server:如何从表中选择其他格式?
我有表格A。如何从表格A中选择表格B格式Sql server 2005 SQL Server:如何从表中选择其他格式?,sql-server-2005,select,Sql Server 2005,Select,我有表格A。如何从表格A中选择表格B格式 Table A Employee Name Effective Date FieldType FieldValue Maung Mya 1/1/2005 Title Project Engineer Maung Mya 1/1/2005 Department IT Department Maung Mya 1/1/2007 Title Assist
Table A
Employee Name Effective Date FieldType FieldValue
Maung Mya 1/1/2005 Title Project Engineer
Maung Mya 1/1/2005 Department IT Department
Maung Mya 1/1/2007 Title Assist Project Manager
Kyaw Kyaw 1/1/2006 Title Software Engineer
Kyaw Kyaw 1/1/2006 Department IT Department
Table B
Effective Date Employee Name Title Department
1/1/2007 Maung Mya Assist Project Manager IT Department
1/1/2006 Kyaw Kyaw Software Engineer IT Department
看起来你想要这样的东西:
SELECT A.[Effective Date],
A.[Employee Name],
A.FieldValue AS Title,
A2.FieldValue AS Department
FROM A INNER JOIN
A AS A2
ON A.[Employee Name] = A2.[Employee Name] AND
A.[Effective Date] = A2.[Effective Date] AND
A.FieldType = 'Title' AND
A2.FieldType = 'Department'
WHERE A.[Effective Date] = (
SELECT MAX([Effective Date])
FROM A AS A3
WHERE A3.[Employee Name] = A.[Employee Name] AND A3.FieldType = 'Title')
AND A2.[Effective Date] = (
SELECT MAX([Effective Date])
FROM A AS A4
WHERE A4.[Employee Name] = A2.[Employee Name] AND A3.FieldType = 'Department')
EDIT:redsdevills我已经编辑了我的代码,并使用您的示例对其进行了测试。现在应该可以了 考虑到同一名员工可能会更换部门,或在其职业生涯中获得晋升,我的两位同事会寻找每种类型的最新生效日期
SELECT derived.[Effective Date],
derived.[Employee Name],
title1.[FieldValue] AS Title,
dept1.[FieldValue] AS Department
FROM
(
SELECT MAX([Effective Date]) AS [Effective Date], [Employee Name]
FROM TableA
GROUP BY [Employee Name]
) derived
-- Inner Join for TITLE
INNER JOIN TableA title1 ON derived.[Employee Name] = title1.[Employee Name]
AND title1.FieldType = 'Title'
AND title1.[Effective Date] = (SELECT MAX(title2.[Effective Date])
FROM TableA title2
WHERE title1.[Employee Name] = title2.[Employee Name]
AND title2.FieldType = 'Title')
-- Inner Join for DEPARTMENT
INNER JOIN TableA dept1 ON derived.[Employee Name] = dept1.[Employee Name]
AND dept1.FieldType = 'Department'
AND dept1.[Effective Date] = (SELECT MAX(dept2.[Effective Date])
FROM TableA dept2
WHERE dept1.[Employee Name] = dept2.[Employee Name]
AND dept2.FieldType = 'Department')
我首先创建了一个derived表以获取最大生效日期和员工姓名,并将其别名为“derived”。然后我创建了加入,以获得最后知道的头衔和部门。是的,我得到了!基于,我可以检索我想要的格式,并且只有2条记录。谢谢大家!答案如下
SELECT TableA.[Effective Date], TableA.[Employee Name], TableA.FieldValue AS Title,A2.FieldValue AS Department FROM TableA INNER JOIN TableA AS A2 ON TableA.[EmployeeName] = A2.[EmployeeName] AND TableA.[EffectiveDate] = (SELECT MAX([EffectiveDate]) FROM TableA AS A3 WHERE A3.[EmployeeName] = TableA.[EmployeeName] AND A3.FieldType = 'Title') AND TableA.FieldType = 'Title' AND A2.FieldType = 'Department'
当我在你的陈述中测试时,结果中的标题字段为空。第一条记录显示Maung Mya的第一个标题“项目工程师”而不是“协助项目经理”。好的,我输入了一个WHERE子句,应该会有所帮助。谢谢,我得到了基于你的答案我想要检索的答案!你的陈述有10条记录。我刚刚刷新了表B中的2项记录。抱歉,这是仓促的,但我想让MAX(生效日期)成为标题和部门的首选。如果我有时间吃午饭,我会把它完全安排好。