从同一个表上的子查询更新列

时间:2016-06-22 03:47:31

标签: sql sql-server

我有一个包含a,b和c列的表。

以下是我的情景:

对于表格中的每一行,我需要找到a="RECLASSEMENT CDS"。从结果中,我将获得列c并找到表的所有相同值c=c和附加条件b="GAP CDS"。为此,我将获得专栏b。我知道这很令人困惑所以我在下面添加了一个示例。

这是我的问题:

CREATE TABLE #TEMP_A
(A varchar(20) null,
B varchar(20) null,
C varchar(20) null)

INSERT #TEMP_A
VALUES
('RECLASSEMENT CDS', 'OLD TYPE', '123'),
('GAP CDS', 'NEW TYPE', '123'),   
('RECLASSEMENT CDS', 'DUMMY', '456')

UPDATE #TEMP_A SET A =
(
    SELECT TOP 1 T3.A
    FROM #TEMP_A T1
    OUTER APPLY
    (
        SELECT C, A
        FROM #TEMP_A T2
        WHERE T2.C = T1.C
        AND T2.B = 'GAP CDS'
    ) T3
    WHERE 
    T1.B = 'RECLASSEMENT CDS'
    AND T1.C = T3.C
) WHERE B = 'RECLASSEMENT CDS'

在上面的数据中,第一行的第二列应该被第二行的第二列替换。但是通过上面的更新声明,甚至第三行也被替换了。我有什么想法可以实现这个逻辑吗?

0 个答案:

没有答案