通过具有替换值的表替换某些值

时间:2015-07-16 16:17:23

标签: sql dynamic replace sql-server-2012

我有一张包含数据的表格。通常,值是正确的,但有时我们需要修改它们。修改保存在第二个表中。

我想创建一个动态替换替换表中存在的值的查询。

这是我的查询设计看起来像但它不起作用: query design

这是我的查询代码:

 [emiliano@dev ~]# gulp script --module=module1 --minify

我的逻辑错误在哪里?它不会取代值。我认为它与所有在没有OR的情况下的连接有关,但OR对于性能来说太昂贵了。

任何有更好主意的人?

1 个答案:

答案 0 :(得分:2)

看起来你想要做的是用替换表中出现的值替换每个值,但是你有三个单独的列,并且这三个值中的每一个在替换表中都有不同的对应条目。因此,您必须在三个不同的时间链接到该表,每个值一次,链接到其替换,如:

SELECT
  b.Pos,
  b.Posten,
  IsNull(c.Wert_Neu, b.Bez1) AS Bez1,
  IsNull(d.Wert_Neu, b.Bez2) AS Bez2,
  IsNull(e.Wert_Neu, b.Bez3) AS Bez3,
  b.Wert,
  b.Einheit
FROM
  Table_Values b 
  LEFT JOIN Table_Replacements c on b.bez1=c.wert_alt
  LEFT JOIN Table_Replacements d on b.bez2=d.wert_alt
  LEFT JOIN Table_Replacements e on b.bez3=e.wert_alt

重要的是,您的替换表在wert_alt上有索引,以便可以有效地完成这些链接。

另一种可能性是将替换值实际存储在主数据表中。所以它的字段是:

bez1
bez1Replacement
bez2
bez2Replacement
...

可能在表上有一个触发器,以便在任何插入或更新时,触发器从替换表中查找三个替换值中的每一个,并将它们添加到主数据记录中。这不会完全正常化,但它会加快您的查询速度。但是,你可能根本不需要这样做。如果你有这个索引,上面的查询可能足够有效。