【发布时间】:2015-01-28 09:21:13
【问题描述】:
最近我正在为我的数据库准备编辑历史记录。我做了一个表格,保存更新前后的记录。我在历史表中添加了对 2 条记录(更新前后的一条)进行配对的列。所以我有完整的历史表。
我现在要做的是创建复杂的(在我看来)视图。我想显示该表中所有记录之间的所有差异。让我解释一下。
我在该表中有 20 列,但让我们取 4 列来说明我的意思: 标题/作者/日期/配对索引。这些是列名。
还有数据:
Book1/Author1/30-03-1990/1
Book1/Author1/30-04-1990/1
Book2/Author2/30-03-2004/2
Book3/Author3/30-03-2004/2
在这里我有 2 个更新。第一次更新只是日期更改。第二次更新更改了书名和作者。我想在我的视图中显示如下内容:
1-- 30-03-1990 -- 30-04-1990
2-- Book2 -- Book3
2-- Author2 -- Author3
因此,每个差异都有自己的行,其中包含不同的数据。这使得每对记录都具有相同的 PairIndex。
这是我不工作的代码:
Create table Boom ( Book VARCHAR(10),
author VARCHAR(10),
date DATE,
id INT )
INSERT INTO Boom
VALUES ( 'Book1', 'Author1', '19900330', 1 ),
( 'Book1', 'Author1', '19900430', 1 ),
( 'Book2', 'Author2', '20040330', 2 ),
( 'Book3', 'Author3', '20040330', 2 );
WITH cte
AS (
SELECT Boom.*, ROW_NUMBER() over (partition by ID order by author) as RN
FROM Boom
)
select b1.id, b2.id, b1.date, b2.date
from cte b1
join cte b2
on b1.id = b2.id
and b1.rn < b2.rn
and b1.date <> b2.date
select b1.id, b2.id, b1.author, b2.author
from cte b1
join cte b2
on b1.id = b2.id
and b1.rn < b2.rn
and b1.author<> b2.author
【问题讨论】:
-
你怎么能确定不会有多个更新?
-
可以有更多 = ) 但是会有不同的ID。
标签: sql sql-server tsql view