我在sql server 2012中有一个主表,该表包含两种类型。

这些是我的主表中的关键列:

TYPE    CATEGORYGROUP   CREDITORNAME    DEBITORNAME


这两种类型之一(类型B)没有分配给CategoryGroup(因此它始终为null)。

类型A始终具有CategoryGroup和Debitor。

类型B始终有一个债权人,但没有CategoryGroup。

对于债权人和借方,我有两个额外的表,这些表也包含CategoryGroup,但是对于我的任务,我只需要债权人表,因为我已经具有正确的类型A(借方)值。

因此,我的目标是根据债权人名称在债权人表中查找CategoryGroup,并理想地将这些CategoryGroup值放入我的主表中。
使用“ put”,我不确定是否应生成视图或将数据实际放置在包含约150万条记录且仍在增长的表中。

还有一个“群集表”,它使用CategoryGroup作为键字段。但这不是我的问题所在。

请看看我的样本fiddle

希望您能够帮助我。
谢谢。

最佳答案

如果我对您的理解正确,则可以简单地进行联接以找到正确的值,然后使用该值更新MainData。

您可以使用公用表表达式...

WITH cte AS (
  SELECT a.*, b.categorygroup cg
  FROM MainData a
  JOIN CreditorList b
    ON a.creditorname = b.creditorname
)
UPDATE cte SET categorygroup=cg;


An SQLfiddle to test with

...或UPDATE / JOIN;

UPDATE m
SET m.categorygroup = c.categorygroup
FROM maindata m
JOIN creditorlist c
  ON m.creditorname = c.creditorname;


Another SQLfiddle

...并且始终记得在对生产数据的Internet上的随机人员运行可能造成破坏性的SQL之前进行测试。

编辑:要只看到相同格式的日期而不进行更新,可以使用;

SELECT
  a.type, COALESCE(a.categorygroup, b.categorygroup) categorygroup,
  a.creditorname, a.debitorname
FROM MainData a
LEFT JOIN CreditorList b
  ON a.creditorname = b.creditorname


Yet another SQLfiddle

10-08 03:09