2012-02-14 94 views
0

我有两个表EmployeeEmployeeLog(与除LogCreatedDate同一列)需要T-SQL的帮助2005

列是这样的:

EmployeeID, EmployeeName, LastModifiedBy, ModifiedDate, 
ColumnA, ColumnB, ColumnC bla-bla-bla 

我需要T-SQL这给我输出如下表所示。

的ResultSet 1:

enter image description here

在每一个Employee表更新我插入EmployeeLog表的新行的当前值。

EmployeeLog表包含每个EmployeeID多个行,所以我需要先前和修改列中的当前值。

因此,我的第一步是我通过LogCreatedDate DESC获取TOP 2记录订单。现在我应该怎么做才能获得如表所示的输出?

的ResultSet 2: enter image description here

感谢

+0

我通过LogCreatedDate DESC有TOP 2创纪录的订单,现在怎么这两行比较,并安排为每在图片 – Sukhjeevan 2012-02-14 09:25:37

回答

1

试试这个:

DECLARE @EmployeeLog TABLE 
(
    EmployeeID int, 
    EmployeeName varchar(50), 
    LastModifiedBy varchar(50), 
    ModifiedDate datetime, 
    ColumnA varchar(50), 
    ColumnB varchar(50), 
    ColumnC varchar(50), 
    LogCreatedDate datetime 
) 

INSERT INTO @EmployeeLog VALUES (1, 'A', 'A', '2012-02-07', 'A', 'B', 'C', '2012-02-07') 
INSERT INTO @EmployeeLog VALUES (1, 'B', 'B', '2012-02-06', 'AA', 'BB', 'CC', '2012-02-06') 

; 
WITH Basics AS 
(
     SELECT *, ROW_NUMBER() OVER (ORDER BY LogCreatedDate DESC) as Entry 
     FROM @EmployeeLog 
),  PivotTable AS 
(
     SELECT EmployeeID, 
       LastModifiedBy, 
       ModifiedDate, 
       'ColumnA' ColumnName, 
       ColumnA ColumnValue, 
       LogCreatedDate, 
       Entry 
     FROM Basics 
     UNION ALL 
     SELECT EmployeeID, 
       LastModifiedBy, 
       ModifiedDate, 
       'ColumnB' ColumnName, 
       ColumnB ColumnValue, 
       LogCreatedDate, 
       Entry 
     FROM Basics 
     UNION ALL 
     SELECT EmployeeID, 
       LastModifiedBy, 
       ModifiedDate, 
       'ColumnC' ColumnName, 
       ColumnC ColumnValue, 
       LogCreatedDate, 
       Entry 
     FROM Basics 
) 
SELECT [Current].LastModifiedBy, [Current].ModifiedDate, 
     Previous.EmployeeID, Previous.ColumnName, 
     Previous.ColumnValue [Previous Value], 
     [Current].ColumnValue [Current Value] 
FROM PivotTable Previous 
JOIN PivotTable [Current] 
    ON Previous.EmployeeID = [Current].EmployeeID AND 
     Previous.ColumnName = [Current].ColumnName AND 
     Previous.Entry = [Current].Entry + 1 
+0

显示表格感谢Rubens.Thanks很多。它真的帮助我。它真棒,它完全按照我的需要。 +1为您的回应。 – Sukhjeevan 2012-02-15 06:14:59

+0

我还有一件事要做的是,现在我想过滤出这个结果集,以便它应该只显示那些已经改变列值的记录,即消除具有相同的前一个和当前值的记录 – Sukhjeevan 2012-02-15 06:36:05

+0

请参阅我的结果集2问题作为参考。现在它应该过滤掉rowno 1&3 NOT 2。 – Sukhjeevan 2012-02-15 06:40:42