sql 2008中的T-SQL

时间:2014-06-24 08:56:44

标签: sql-server-2008

我想在sql 2008中获得以下内容。

enter image description here

这是我的逻辑:

表1是源表。

IF匹配(域名和公司和国家/地区)与表2 - >将更新价格

否则

如果匹配(域)与表3 - >将更新价格

否则如果匹配(域)与表2 - >将更新价格

否则如果匹配(公司和国家)与表2 - >将更新价格

如果符合上述条件之一,将更新源表中的价格。

我应该如何循环源表? 源表中可能有很多记录。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我认为应该这样做:

UPDATE T1
SET Price = CASE
    WHEN T2.Id IS NOT NULL THEN T2.Price
    WHEN T3.Id IS NOT NULL THEN T3.Price
    WHEN T22.Id IS NOT NULL THEN T22.Price
    ELSE T1.Price END
FROM [Table 1] T1
LEFT
JOIN [Table 2] T2
        ON  T1.Company = T2.Company
        AND T1.Country = T2.Country
        AND SUBSTRING(T1.Email, CHARINDEX('@', T1.Email) + 1, LEN(T1.Email)) = T2.Domain
LEFT
JOIN [Table 3] T3
        ON SUBSTRING(T1.Email, CHARINDEX('@', T1.Email) + 1, LEN(T1.Email)) = T3.Domain
LEFT
JOIN [Table 2] T22
        ON  T1.Company = T2.Company
        AND T1.Country = T2.Country

答案 1 :(得分:-1)

对不起,我没有费心去编写或测试代码,但如果上面的解决方案给出了正确的结果,你应该考虑为相同的条件添加一个WHERE子句测试。这样你就不会做更新原始值不会改变的行的工作。

无需循环。 UPDATE将应用于未通过JOINS或WHERE子句过滤掉的T1中的每一行。