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
输出
Rev ChangedBy Description History
------------------------------------------------
1 A description_1 history_1
2 B description_2 history_1
3 C description_2 history_2
描述和历史记录列将具有先前已知的值,如果它们没有该Rev号的值。即自从Rev No。 3描述在TABLE_B中没有条目,因此最后一个已知值description_2出现在Rev no的那一列中。输出中有3个。
答案 0 :(得分:0)
在以下帖子的帮助下
PIVOT on Common Table Expression
SQL QUERY replace NULL value in a row with a value from the previous known value
我能够提出以下查询以获得所需的输出。
;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