【发布时间】:2013-04-15 21:07:05
【问题描述】:
我使用的是 SQL Server 2005。
我有一个表,每次更改某个字段时都会对行进行存档。我必须生成一个报告,显示为每个员工更改的字段。
我的表架构:
tblEmp(empid, name, salary, createddate)
我的表格数据:
Row 1: 1, peter, 1000, 11/4/2012
Row 2: 1, peter, 2000, 11/5/2012
Row 3: 1, pete, 2000, 11/6/2012
Row 4: 1, peter, 4000, 11/7/2012
根据以上员工彼得(员工 id 1)的数据,输出(更改)将是:
结果集:
1, oldsalary: 1000 newsalary: 2000 (changed on 11/5/2012)
1, oldname: peter newname: pete (changed on 11/6/2012)
1, oldname: pete newname: peter, oldsalary:2000, newsalary: 4000 (changed on 11/7/2012)
我正在尝试提出生成上述结果集的 sql。
我尝试做一些类似于此线程中第一个答案的事情:How to get difference between two rows for a column field?
但是,它并没有走到一起,所以想知道是否有人可以提供帮助。
【问题讨论】:
-
您如何确定哪一行是第 1 行,哪一行是第 2 行等?似乎没有一列指示哪一行先发生,那么 SQL Server 怎么能告诉你呢?它不会跟踪以何种顺序插入了哪些行 - 将一个表视为一袋行。
-
您链接的问题与您的问题非常相似,“它没有融合在一起”实际上是什么意思?
-
假设它是有序的。第 1 行更改为第 2 行,第 2 行更改为第 3 行...等等
-
@Prabhu 。 . . SQL 表是没有有序的。您需要有一个明确的排序列——行 ID、创建日期或类似的东西。
-
@Pondlife,我稍微修改了一下,让它显示旧值和新值而不是做减法,但是新值总是NULL,在这种情况下不是
标签: sql sql-server tsql sql-server-2005