我有一张表A,其中包含以下记录。
Use_code | SITE_NUM | rep_name
BILL_TO 119 abc
SHIP_TO 119 xyz
BILL_TO 120 jkf
SHIP_TO 121 nir
我需要更新下面的表格B.对于每个SITE_NUM
,我们需要在不同的列下更新BILL_TO和SHIP_TO记录rep_name,如下所示。
SITE_NUM | BILL_TO_REP_NAME | SHIP_TO_REP_NAME
119 | abc | xyz
120 | jkf | null
121 | nul | nir
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
嗯,我不确定这是最好的解决方案,但这是第一个想到我的想法,如果没有人能找到更好的解决方案,你可以尝试这样做:
SELECT s.SITE_NUM, b.REP_NAME AS BILL_TO_REP_NAME,
sh.REP_NAME AS SHIP_TO_REP_NAME
FROM (SELECT SITE_NUM
FROM tblA
GROUP BY SITE_NUM) s
LEFT OUTER JOIN (SELECT SITE_NUM, rep_name
FROM tblA
WHERE Use_code = 'BILL_TO') b ON s.SITE_NUM = b.SITE_NUM
LEFT OUTER JOIN (SELECT SITE_NUM, rep_name
FROM tblA
WHERE Use_code = 'SHIP_TO') sh ON s.SITE_NUM = sh.SITE_NUM
ORDER BY s.SITE_NUM;
以下是SQL Fiddle,了解它是如何工作的......我对数据库的看法很糟糕,但我认为这样做会有所作为。
GL!
答案 1 :(得分:0)
您可以使用条件聚合生成结果:
select a.site_num,
max(case when a.use_code = 'BILL_TO' then rep_name end) as bill_to,
max(case when a.use_code = 'BILL_FROM' then rep_name end) as bill_from
from a
group by a.site_num;
要使用此信息更新行,您可以使用merge
。但是,如果你真的需要一个update
,那就不明显了。