Sql server 2005 SQL Server:如何从表中选择其他格式?

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

我有表格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 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(生效日期)成为标题和部门的首选。如果我有时间吃午饭,我会把它完全安排好。