2010-03-23 81 views
3

我有表A.如何从表A中选择表B格式?SQL Server:我如何从表中选择其他格式?

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 

回答

0

是的,我明白了!根据Gabe's answer,我可以检索我想要的格式并且只有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' 
2

它看起来像你想是这样的:

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') 
+0

非常感谢! – RedsDevils 2010-03-23 16:24:50

+0

当我在你的陈述中测试时,标题字段的结果是NULL。并且第一个记录显示Maung Mya“项目工程师”的第一个标题而不是“协助项目经理”。 – RedsDevils 2010-03-23 16:56:22

+0

好吧,我把一个WHERE子句,应该帮助。 – Gabe 2010-03-23 17:14:24

2

编辑:RedsDevils我已经编辑我的代码,并使用你的例子进行了测试。这应该考虑到现在

轴承,同样的员工可能会改变部门,或通过他的职业生涯得到了提升,我的两个加入寻找每种类型的最新的生效日期

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') 

我创建了一个派生表率先拿到MAX生效日期和雇员姓名,并与“衍生”的名称别名它。然后我创建了加入以获得最后知道的标题和部门。

+0

您的报表结果有10条记录。我只是需要2个记录,如表B所示。 – RedsDevils 2010-03-23 16:57:23

+0

道歉,它很匆忙,但我想获得MAX(effective_date)的标题和部门的原则。如果我在午餐时间,我会完全解决它。 – kevchadders 2010-03-24 10:46:04

+0

这已被编辑为可用 – kevchadders 2010-03-24 11:25:21

相关问题