【发布时间】:2015-10-15 16:04:34
【问题描述】:
这是我第一次在这里发布问题,所以请温柔,我尽可能详尽地搜索。有时,如何寻找答案才是成功的一半。
我正在尝试使用表 2 中每个人在每个时期的数据更新表 1。有些人会在表 2 中有 A、B 和/或 C 类记录,但不是全部,也不一定是全部三个。
我遇到的问题是我用来更新的语句将更新一些列,但不是全部。我猜这是因为在进行更新时尚未提交更新,因此它无法获取尚未提交的值。
我是否需要执行 3 个单独的更新语句,或者可以通过 case 语句以某种方式处理。我在这里寻找最有效的方法。更新每个时期有 200 万条记录的表 1。
表 1 - Period_Perf
CustID
Period_Date
Perf_Cat_A
Perf_Cat_B
Perf_Cat_C
表 2 - Period_Perf_Detail
CustID
Period_Date
Perf_Category (will contain A, B, or C)
Perf_Points (will contain a integer value)
这基本上是我一直在尝试使用的语句:
UPDATE
Period_Perf
SET
Perf_Cat_A = CASE WHEN pd.Perf_Category = 'A' then pd.Total_Perf_Points else Perf_Cat_A END
Perf_Cat_B = CASE WHEN pd.Perf_Category = 'B' then pd.Total_Perf_Points else Perf_Cat_B END
Perf_Cat_C = CASE WHEN pd.Perf_Category = 'C' then pd.Total_Perf_Points else Perf_Cat_C END
from
Period_Perf
ON
INNER JOIN
(
select
CustID
,Period_Date
,Perf_Category
,sum(Perf_Points) as Total_Perf_Points
from
Period_Perf_Detail
group by CustID, Period_Date, Perf_Category
) as pd
ON
Period_Perf.CustID = pd.CustID and Period_Perf.Period_Date = pd.Period_Date
【问题讨论】:
-
这里的问题是 Perf_Cat_A、B 和 C 将同时更新,从 pd -select 中的一行更新——所以如果那里有不止一行,您不会获得对不同列的单独更新
-
我怀疑可能是这种情况。希望有一个技巧,而不是使用三个单独的更新语句。再次感谢! (顺便说一句,你是如何让我的代码 sn-p 格式化得这么好?我试图弄清楚如何做到这一点)
-
您可以通过缩进 4 个空格来获取代码,或者在编辑框上方还有一个按钮显示“代码示例”
标签: sql-server sql-server-2014