sql – 在填充值时合并两个版本跟踪表

前端之家收集整理的这篇文章主要介绍了sql – 在填充值时合并两个版本跟踪表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个跟踪数据库值更改的历史记录表,使用修订ID来跟踪各个更改.例如

表格1:

rev |  A   |  B 
=================
 1   |  100 | 'A'
 4   |  150 | 'A'
 7   |  100 | 'Z'

表2:

rev |  C   |  D 
==================
 1   |  200 | True
 5   |    0 | True
 8   |    0 | False

目标是将两个表合并为:

rev |  A   |  B  |  C  |  D 
===============================
 1   |  100 | 'A' | 200 | True
 4   |  150 | 'A' | 200 | True
 5   |  150 | 'A' |   0 | True
 7   |  100 | 'Z' |   0 | True
 8   |  100 | 'Z' |   0 | False

这个想法是,对于给定的修订,我会采用与该修订相对应的值或者低于它的最高修订版.

想到的SQL查询类似于使用约束rev1<交叉连接两个表. rev2,然后使用子查询选择行,其中rev1 = max(rev1)为每个给定的rev2;将此查询与其对应方交换rev2和rev1;最后过滤掉rev1 = rev2的副本. 问题是:
>这种类型的加入是否有名称
>在sql中是否有用于执行此类连接的习惯用法,或者以编程方式执行此操作会更好(这肯定会更简单,也可能更高效)?

解决方法

SQL Fiddle
select
    coalesce(t1.rev,t2.rev) rev,coalesce(a,lag(a,1) over(order by coalesce(t2.rev,t1.rev))) a,coalesce(b,lag(b,t1.rev))) b,coalesce(c,lag(c,1) over(order by coalesce(t1.rev,t2.rev))) c,coalesce(d,lag(d,t2.rev))) d
from
    t1
    full join
    t2 on t1.rev = t2.rev
order by rev
原文链接:https://www.f2er.com/mssql/78634.html

猜你在找的MsSQL相关文章