首页 文章

更新表中的列

提问于
浏览
2

所有,

我试图用表中的数据更新表格中的C_NEW列,但不知道从哪里开始 . 我希望底层解释有所帮助 .

C1      | C2      | C3      | C4         | C_NEW
-------- --------- --------- ------------ -------
1@a.com | e@a.com | e@a.com | 1@a.com    |
1@a.com | e@a.com | 4@b.com | 12@f.com   |
1@a.com | e@a.com | 5@b.com | 123@k.com  |
4@b.com | b@a.com | 4@b.com | ab@123.com |
4@b.com | b@a.com | d@a.com | abc@12.com |
2@c.com | 3@c.com | b@1.com | a12@ff.com |

电子邮件需要通过C1和C2的组合发送给C1中的用户,因此三个单独的电子邮件应发送到1 @ a.com,4 @ b.com和2@c.com

复制到不在C1或C2的C3中的用户,所以在C_NEW列中我想要(4@b.com; 5@b.com)填写前三行和(d@a.com)应该填写第四行和第五行,(b@1.com)应填写C_NEW列的最后一行 .

还需要复制不在C1中的C4列中的用户 . 所以更新栏C_NEW应该有(4@b.com; 5@b.com; 12@f.com; 123@k.com)填写前三行和(d@a.com; ab @ 123 . com; abc@12.com)应填写第4行和第5行,并且(b@1.com; a12@ff.com)应填写C_New列的最后一行 .

有了上述数据,我应该有三份报告......

Report A: 1@a.com
Email to:
Copy to: 4@b.com; 5@b.com; 12@f.com; 123@k.com


Report B:
Email to: 4@b.com
Copy to: d@a.com; ab@123.com; abc@12.com

Report C:
Email to: 2@c.com
Copy to: b@1.com; a12@ff.com

表最终结果应如下所示

C1      | C2      | C3      | C4         | C_NEW
-------- --------- --------- ------------ -------
1@a.com | e@a.com | e@a.com | 1@a.com    | 4@b.com; 5@b.com; 12@f.com; 123@k.com
1@a.com | e@a.com | 4@b.com | 12@f.com   | 4@b.com; 5@b.com; 12@f.com; 123@k.com
1@a.com | e@a.com | 5@b.com | 123@k.com  | 4@b.com; 5@b.com; 12@f.com; 123@k.com
4@b.com | b@a.com | 4@b.com | ab@123.com | d@a.com; ab@123.com; abc@12.com
4@b.com | b@a.com | d@a.com | abc@12.com | d@a.com; ab@123.com; abc@12.com
2@c.com | 3@c.com | b@1.com | a12@ff.com | b@1.com; a12@ff.com

1 回答

  • 1

    您可以通过select语句更新现有数据 .

    在这里你选择所有C3和C4与你的条件和 UNION . 这个列表你必须通过 XML PATH 连接并构建你的 C_NEW 列 .

    UPDATE [Table]
        SET C_NEW = SelectTable.C_NEW
    FROM
    ( 
        SELECT [Table].c1, [Table].c2, c3, c4, SUBSTRING(t2.C_NEW , 2, LEN(t2.C_NEW)) AS C_NEW
        FROM dbo.[Table]
        LEFT JOIN (
        SELECT C1, C2, (
            (SELECT ', ' + C3 AS [text()]  FROM (
                SELECT C1, c2, C3 FROM [Table]
                WHERE C3 <> C1 AND C3 <> C2 AND C1 = t.C1 AND C2 = t.C2
                UNION 
                SELECT C1, c2, C4 FROM [Table]
                WHERE C4 <> C1 AND C1 = t.C1 AND C2 = t.C2
            ) AS t3 For XML PATH (''))
        )
        AS C_NEW
        FROM [Table] AS t
        GROUP BY C1, C2, t.C_NEW
        ) AS t2 ON t2.C1 = [Table].C1 AND t2.C2 = [Table].C2
    ) AS SelectTable
    WHERE [Table].C1 = SelectTable.C1 
        AND [Table].C2 = SelectTable.C2 
        AND [Table].C3 = SelectTable.C3
        AND [Table].C4 = SelectTable.C4
    

相关问题