根据上面显示的表,我需要做的是,如果某个特定ID的COUNTRY字段为空,则选择相应的UNDERLYING_ID,并将其交叉引用到ID列,然后从UNDERLYING_ID与ID匹配的行中选择COUNTRY值。
因此,在本例中,A701的country值将为JAP,因为underlying_ID A706的ID列(最后一条记录)中有一个匹配项
不确定如何在此处编写查询。请给我建议。
发布于 2018-08-03 04:50:41
select t1.ID, coalesce(t1.country, t2.country) as country
from myTable t1
left join myTable t2 on t1.Id = t2.underlying_id
发布于 2018-08-03 22:52:21
根据您所说的不需要对"NULL“国家值进行多级查找,我认为CASE
语句中的子select非常适合这种数据模式,并且已经在类似的情况下使用过它。
类似于:
SELECT
CASE WHEN COUNTRY IS NOT NULL THEN COUNTRY
ELSE ( SELECT T2.COUNTRY FROM [TABLE NAME] T2 WHERE T2.ID = T.UNDERLYING_ID )
END AS Country
FROM [TABLE NAME] T
引擎很可能会将其转换为左连接,因此它的性能与@Cetin的答案相同,但在我看来,这是一个更具可读性的解决方案。
如果您想要将空值替换为特定值,您可以使用COALESCE
,如下所示:
SELECT
COALESCE(
CASE WHEN COUNTRY IS NOT NULL THEN COUNTRY
ELSE ( SELECT T2.COUNTRY FROM [TABLE NAME] T2 WHERE T2.ID = T.UNDERLYING_ID )
END,
'(ReplacementValue)') AS Country
FROM [TABLE NAME] T
https://stackoverflow.com/questions/51661879
复制相似问题