Sql server 2008 SQL 2008中的T-SQL
我试图在sql 2008中获得以下内容 我的逻辑是: 表1是源表 如果将(域、公司和国家)与表2匹配->将更新价格 否则 如果将(域)与表3匹配->将更新价格 否则,如果将(域)与表2->匹配,将更新价格 否则,如果将(公司和国家)与表2->匹配,将更新价格 如果符合上述条件之一,将更新源表中的价格 如何循环源表? 源表中可能有很多记录Sql server 2008 SQL 2008中的T-SQL,sql-server-2008,Sql Server 2008,我试图在sql 2008中获得以下内容 我的逻辑是: 表1是源表 如果将(域、公司和国家)与表2匹配->将更新价格 否则 如果将(域)与表3匹配->将更新价格 否则,如果将(域)与表2->匹配,将更新价格 否则,如果将(公司和国家)与表2->匹配,将更新价格 如果符合上述条件之一,将更新源表中的价格 如何循环源表? 源表中可能有很多记录 提前谢谢。像这样的东西应该可以做到,我想: UPDATE T1 SET Price = CASE WHEN T2.Id IS NOT NULL THE
提前谢谢。像这样的东西应该可以做到,我想:
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
对不起,我没有费心写或测试代码,但是如果上面的解决方案给了你正确的结果,你应该考虑在相同的条件下添加WHERE子句测试。这样,您就不会更新原始值不会改变的行
没有必要循环。更新将应用于T1中未被联接或WHERE子句过滤掉的每一行。听起来不应该循环。尝试将您的查询构建为基于“匹配项”使用CASE或类似于join的select查询。然后,构建select之后,将select更改为更新。