Sql 根据表中存在的值采取不同的操作

Sql 根据表中存在的值采取不同的操作,sql,sql-server,tsql,sql-insert,Sql,Sql Server,Tsql,Sql Insert,我有一个表,其中我添加了其他表中特定列值的更改: 更新日志表: 表名 柱形过滤器 过滤名称 过滤值 差别 日期 水果 果名 苹果 4. 0 1/13/2021 水果 果名 梨 5. 0 1/13/2021 你问题中的代码相当混乱。例如: #未定义HistoryUpdatesSuccess 使用FRUITS的聚合子查询格式不正确 JOIN条件缺少筛选值 但是,我想我知道您想要做什么——插入新行,其中包含一个DIFF列,该列合并了现有数据中的最新数据 这看起来像是历史记录表中最新记录的左联接。剩

我有一个表,其中我添加了其他表中特定列值的更改:

更新日志表:

表名 柱形过滤器 过滤名称 过滤值 差别 日期 水果 果名 苹果 4. 0 1/13/2021 水果 果名 梨 5. 0 1/13/2021
你问题中的代码相当混乱。例如:

  • #未定义HistoryUpdatesSuccess
  • 使用
    FRUITS
    的聚合子查询格式不正确
  • JOIN
    条件缺少筛选值
但是,我想我知道您想要做什么——插入新行,其中包含一个
DIFF
列,该列合并了现有数据中的最新数据

这看起来像是历史记录表中最新记录的左联接。剩下的就是
COALESCE()


但是如果我有了一个新的水果,这会起作用吗。我认为左连接将忽略它,因为它以前在UpdatesLogTable中不存在。这是我的主要任务concern@Yana . . . 否,
左连接不会忽略它。这就是为什么查询使用
LEFT JOIN
,而不是其他类型的
JOIN
。我修复了#HistoryUpdatesSuccess:)它现在是正确的名称。哦,我知道这里发生了什么:)您将UpdatesLogTable左键连接到水果表,这就是为什么它会工作的原因。谢谢我尝试了相反的方法,这就是为什么它对我不起作用。不是行号()吗。。。如果我们有大桌子,分区会很慢吗?@Yana。在大的表上,所有的东西都是慢的,所以替代品不一定要快得多(实际上相关的子查询通常有点快,但使查询更复杂,特别是对于外部连接)。考虑在INSERT 和<代码>上使用触发器<代码>更新< /COD>
INSERT INTO UpdatesLogTable(TableName, ColumnFilter, FilterName, FilterValue, [Difference], [Date])
    SELECT f.TableName, f.ColumnFilter, f.FilterName, f.FilterValue,
           COALESCE(f.FilterValue - ult.FilterValue, 0), 
           LUP as [Date]
    FROM FRUITS F LEFT JOIN
         (SELECT ult.*,
                 ROW_NUMBER() OVER (PARTITION BY TableName, ColumnFilter ORDER BY LastUpdateDate) as seqnum
          FROM UpdatesLogTable ult 
         ) ult
         ON tr.TableName = ult.TableName AND
            tr.ColumnFilter = ult.ColumnFilter AND
            tr.FilterName = ult.FilterName
            seqnum = 1;