请原谅我认为应该是一个相当简单的问题,但我很难找到其他相同条件的问题。
我有一个SQL Server数据库表,其中包含WorkplaceName
列(nvarchar
),此列有许多不同的可能性,来自不同的源系统,并且无法在上游更改。
从MainDataTable
:
WorkplaceName | Value
---------------------
ID1234 | 54
ID9876 | 99
ID 2345 | 76
几乎所有这些条目都是正确的,但是,有少量条目是不正确的,并且出于下游数据操作的目的,我需要根据非详尽的查找表来纠正这些位置中的少数几个
我们假设'ID 2345'形成错误,应该是ID2345。
我有一个名为WorkplaceLookups
的查找表,它只包含已知错误的条目以及更正的输出:
WorkplaceNameReference | WorkplaceNameLookup
----------------------------------------------
'ID 2345' | 'ID2345'
因此,如果正确形成的Workplace(不在查找列表中),我想返回原始值;如果存在格式错误的Workplace,则应使用查找中的值进行更正。
使用SQL-ish伪代码,这或多或少是我正在尝试做的事情:
SELECT
CASE
WHEN [MainDataTable].[WorkplaceName] IN [WorkplaceLookups].[WorkplaceNameReference]
THEN [WorkplaceLookups].[WorkplaceNameLookup]
ELSE [MainDataTable].[WorkplaceName]
END AS [WorkplaceNameCorrected],
[Value]
FROM
MainDataTable
我应该怎么做?如果可能的话,我想避免任何函数或存储过程,但如果唯一的解决方案就是使用它,那就这样吧。
非常感谢任何反馈。
非常感谢, 布赖恩
答案 0 :(得分:1)
使用left outer join
和coalesce()
:
SELECT COALESCE(wl.WorkplaceNameLookup, mdt.WorkplaceName) as WorkplaceNameCorrected,
Value
FROM MainDataTable mdt LEFT JOIN
WorkplaceLookups wl
ON mdt.WorkplaceName = wl.WorkPlaceNameReference;
答案 1 :(得分:0)
SELECT IsNull(m.WorkplaceNameLookup, l.WorkplaceName) as WorkplaceName, Value
FROM MainDataTable m LEFT JOIN
WorkplaceLookups l ON m.WorkplaceName = l.WorkPlaceNameReference
希望这会对你有所帮助。