如何从表中的2个相关行中使结果集中的一行

时间:2018-10-24 19:44:34

标签: sql tsql

每次在我们的系统中进行交易时,我们都会在表中写两行,以捕获Code的原始值和Code的新值,然后捕获两行的相同Transaction_ID。

表结构:

History_ID primary key
Transaction_ID int
Code varchar(3)

样本数据:

1   12345     ABC
2   12345     DEF

我需要一个查询,该查询将通过将具有相同Transaction_ID的2行连接起来而返回1行。结果集应在插入的第一行的“代码”列中标记为“旧代码”,然后在插入的第二行中将其标记为“新代码”。

示例输出:

Transaction Old Code New Code
12345       ABC      DEF

我尝试使用子查询,但是我总是返回2行。我正在使用SQL Server。

2 个答案:

答案 0 :(得分:1)

您可以在查询中多次对同一个表进行别名。在这种情况下,请通过Transaction_Id加入两个事务实例,并通过检索具有更大历史记录ID的行来使section实例为新的实例。

SELECT a.Transaction_ID, a.Code [OldCode], b.Code [NewCode]
FROM trx a
INNER JOIN trx b ON b.Transaction_ID = a.Transaction_ID
AND b.HistoryId > a.HistoryId

这假定每个事务ID只有两行。如果您有一系列交易事件,那么这将不起作用,并且您必须变得更加复杂。

答案 1 :(得分:1)

自行加入表格

SELECT h1.transaction_id, h1.code as 'New Code', h2.code as 'Old Code'
FROM history h1
JOIN history h2 ON h1.transaction_id = h2.transaction_id AND h1.history_id > h2.history_id