Нужна помощь T-SQL в Sql Server 2005 - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть две таблицы Employee и EmployeeLog (с одинаковыми столбцами, кроме LogCreatedDate)

Столбцы примерно такие:

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

Мне нужен T-SQL, который дает мне вывод, как показано в этой таблице.

ResultSet 1:

enter image description here

При каждом обновлении таблицы Employee я вставляю новую строку в таблицу EmployeeLog с текущими значениями.

EmployeeLog таблица содержит несколько строк для каждого EmployeeID, поэтому мне нужно предыдущее и текущее значение в столбце, который изменяется.

Итак, мой первый шаг - получить порядок записи TOP 2 на LogCreatedDate DESC. Теперь, что я должен сделать для получения вывода, как показано в таблице?

ResultSet 2: enter image description here

Спасибо

1 Ответ

1 голос
/ 14 февраля 2012

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...