Sql 将数据表与查找表联接以修复错误数据
假设我有两张桌子: 数据表:Sql 将数据表与查找表联接以修复错误数据,sql,database,Sql,Database,假设我有两张桌子: 数据表: CURRENCY COUNTRY VAT MODE USD US FREEVAT AIR EUR ESP FREEVAT SEA GBP UK FREEVAT ROA 查找: COLUMN_NAME INPUT_VALUE OUTPUT_VAL
CURRENCY COUNTRY VAT MODE
USD US FREEVAT AIR
EUR ESP FREEVAT SEA
GBP UK FREEVAT ROA
查找:
COLUMN_NAME INPUT_VALUE OUTPUT_VALUE
COUNTRY US United States
COUNTRY ESP Spain
COUNTRY UK United Kingdom
VAT FREEVAT 0
是否有办法在SELECT语句中联接这些表,以便用列名称替换匹配项?
有更好的结构化方法解决此问题吗?您可以使用
连接,但需要明确列名称:
select d.currency,
coalesce(lc.output_value, d.country) as country,
coalesce(lv.output_value, d.vat) as vat,
d.mode
from data d left join
lookup lc
on lc.input_value = d.country and
lc.column_name = 'COUNTRY' left join
lookup lv
on lv.input_value = d.vat and
lv.column_name = 'VAT'
您可以使用join
,但需要明确列名称:
select d.currency,
coalesce(lc.output_value, d.country) as country,
coalesce(lv.output_value, d.vat) as vat,
d.mode
from data d left join
lookup lc
on lc.input_value = d.country and
lc.column_name = 'COUNTRY' left join
lookup lv
on lv.input_value = d.vat and
lv.column_name = 'VAT'
这是一种非常糟糕的方法,您应该有单独的列,甚至单独的表来保存不同实体的数据(例如在您的示例country和vat中)@eshirvana这是一个虚构的示例,我试图在这里实现的是ELT中一系列过程中的一个过程,它将修复接收到的数据。这是一种非常糟糕的方法,您应该有单独的列,甚至单独的表来保存不同实体的数据(如您的示例国家和增值税)@eshirvana这是一个虚构的示例,我试图在这里实现的是ELT内一系列过程中的一个过程,它将修复接收到的数据。第二个合并
应该是lv
而不是lc
。除此之外,答案和往常一样非常好。谢谢你的回答,这非常有效,但是如果我的数据表中的列数变大,事情会变得非常糟糕。有没有其他方法可以避免继续在连接上添加连接?@rstici。如果需要跨多个不相关的列执行此重新编码问题,我想不出一个简单的解决方案。第二个coalesce
应该是lv
而不是lc
。除此之外,答案和往常一样非常好。谢谢你的回答,这非常有效,但是如果我的数据表中的列数变大,事情会变得非常糟糕。有没有其他方法可以避免继续在连接上添加连接?@rstici。如果需要跨多个不相关的列进行重新编码,我想不出一个简单的解决方案。