преобразование идентификатора в имя столбца, а также замена NULL на последнее известное значение - PullRequest
0 голосов
/ 04 марта 2010

TABLE_A

Rev     ChangedBy
-----------------------------
1       A
2       B
3       C

TABLE_B

Rev Words      ID
----------------------------
1 description_1   52
1 history_1         54
2 description_2   52
3 history_2         54

Тип данных столбца слов - ntext.

TABLE_C

ID Name
-----------------------------
52 Description
54 History

OUTPUT

Rev ChangedBy Description        History  
------------------------------------------------
1     A   description_1      history_1
2     B   description_2      history_1
3     C   description_2      history_2

Столбец «Описание и история» будет иметь предыдущие известные значения, если они не имеют значения для этого номера Rev. Т.е. для Rev нет. 3 Описание не имеет записи в TABLE_B, поэтому последнее известное значение description_2 появляется в этом столбце для Rev №. 3 на выходе.

1 Ответ

0 голосов
/ 05 марта 2010

С помощью следующих постов
PIVOT в общем выражении таблицы
SQL QUERY заменяет значение NULL в строке значением из предыдущего известного значения

Мне удалось найти следующий запрос, чтобы получить желаемый результат.

    ;WITH CTE_A AS
    (
        SELECT a.Rev, a.ChangedBy, CAST(b.Words as nvarchar(max)) as [Words],c.Name FROM Table_A AS a
        INNER JOIN Table_B AS b ON a.Rev = b.Rev
        INNER JOIN Table_C AS c ON b.FId = c.Id
    ),
    CTE_B AS
    (

    select Rev, ChangedBy, [Description], [History] from
    CTE_A
    PIVOT
    (
        MAX([Words])
        FOR [Name] in ([Description],[History])
    ) as p
    )

select Rev,ChangedBy, 
ISNULL([Description],(select top 1 [Description] from CTE_B where Rev < t.Rev and [Description] is not null order by Rev desc)),
ISNULL([History],(select top 1 [History] from CTE_B where Rev < t.Rev and [History] is not null order by Rev desc))  
from CTE_B t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...