我对sql比较陌生,我遇到了一个目标表没有更新的问题。我有重复的帐户#(键),在相关列中有不同的联系信息。我正在尝试将联系人信息(源)合并到一个行/帐号中,而不重复的联系人信息将合并到(目标)扩展列中。
我构造了一个带有case条件的merge语句来检查目标表中是否存在数据。如果数据不在目标表中,则在扩展列中添加信息。问题是目标表没有得到更新。源表和目标表都定义了相似性。
**Merge SQL- reduced query**
MERGE INTO target tgt
USING (select accountno, cell, site, contact, email1 from (select w.accountno, w.cell, w.site, w.contact, email1, row_number() over (PARTITION BY w.accountno order by accountno desc) acct
from source w) inn where inn.acct =1) src
ON (tgt.accountno = src.accountno)
WHEN MATCHED
THEN
UPDATE SET
tgt.phone4 =
CASE WHEN src.cell <> tgt.cell
THEN src.cell
END,
tgt.phone5 =
CASE WHEN src.site <> tgt.site
THEN src.site
END
我已经确认源表中有accountno的联系信息,应该添加到目标表中。我非常感谢任何关于为什么不更新目标表的见解。我在堆栈上看到了一个类似的问题,但没有得到回答。
2条答案
按热度按时间nukf8bse1#
using子句中的src子查询只为每个accountno返回1个随机行。您需要聚合它们,例如使用pivot:
最后,您可以将r1\u cell、r1\u site、r2\u cell、r2\u site与目标值进行比较,并使用所需的值:
whhtz7ly2#
问题在于您在第\行中使用的逻辑,即用相同的帐号对行进行编号。