Выберите данные строки как ColumnName и Значение

У меня есть таблица истории, и я должен выбрать значения из этой таблицы в ColumnName, форме ColumnValue. Я использую SQL Server 2008, и я не был уверен, мог ли я использовать функцию ЦЕНТРА для выполнения этого. Ниже упрощенный пример того, что я должен выполнить:

Это - то, что я имею:

Схема таблицы

CREATE TABLE TABLE1 (ID INT PRIMARY KEY, NAME VARCHAR(50))  

Схема таблицы “истории”

CREATE TABLE TABLE1_HISTORY(
   ID INT, 
   NAME VARCHAR(50), 
   TYPE VARCHAR(50), 
   TRANSACTION_ID VARCHAR(50))

Вот данные из TABLE1_HISTORY

ID  NAME        TYPE        TRANSACTION_ID
1    Joe         INSERT      a
1    Bill        UPDATE      b
1    Bill        DELETE      c

Я должен извлечь данные из TABLE1_HISTORY в этот формат:

TransactionId   Type        ColumnName  ColumnValue
a               INSERT      ID          1
a               INSERT      NAME        Joe
b               UPDATE      ID          1
b               UPDATE      NAME        Bill
c               DELETE      ID          1
c               DELETE      NAME        Bill

Кроме обновления до Enterprise Edition и усиление созданного в функциональности отслеживания изменений, каково Ваше предложение для того, чтобы выполнить эту задачу?

1
задан o0'. 11 May 2010 в 14:11
поделиться

1 ответ

Можно попробовать использовать UNION

Test Data

DECLARE @TABLE1_HISTORY TABLE (
   ID INT, 
   NAME VARCHAR(50), 
   TYPE VARCHAR(50), 
   TRANSACTION_ID VARCHAR(50))


INSERT INTO @TABLE1_HISTORY
SELECT 1, 'Joe', 'INSERT', 'a'
UNION ALL SELECT 1, 'Bill', 'UPDATE', 'b'
UNION ALL SELECT 1, 'Bill', 'DELETE', 'c'

SQL Statement

SELECT    [TransactionID] = Transaction_ID
          , [Type] = [Type]
          , [ColumnName] = 'ID'
          , [ColumnValue] = CAST(ID AS VARCHAR(50))
FROM      @Table1_History
UNION ALL
SELECT    [TransactionID] = Transaction_ID
          , [Type] = [Type]
          , [ColumnName] = 'NAME'
          , [ColumnValue] = [Name]
FROM      @Table1_History
ORDER BY  TransactionID
          , ColumnName
1
ответ дан 3 September 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: