我有一张表,其中的数据如下所示,
create table #UserRegion
(
UserName varchar(25),
RegionName varchar(25),
RegionID varchar(10),
RegionStatus varchar(15),
DefaultFlag char(1)
)
Insert into #UserRegion
values ('UserOne', 'Chicago', 'MW-1', 'Oniline', '1'),
('UserTwo', 'SanJose', 'W-6', 'Oniline', '0'),
('UserThree', NULL, NULL, 'Oniline', NULL),
('UserFour', NULL, NULL, 'Oniline', NULL),
('UserFive', 'Miami', 'E-4', 'Oniline', '0')
我想要的结果集是,如果regionname / regionid为null,那么它应该从Defaultflag = 1的可用区域名和区域ID中选择区域名和区域ID。
任何帮助将不胜感激。
您似乎拥有非常差的数据结构。为什么默认值与用户一起存储?
无论如何,这可能会满足您的要求:
select ur.*,
coalesce(ur.regionname, urdefault.regionname) as regionname,
coalesce(ur.regionid, urdefault.regionid) as regionid
from #UserRegion ur cross join
(select ur.*
from #UserRegion ur
where DefaultFlag = '1'
) urdefault;
假定只有一行设置了默认标志。
我应该注意,您可以在没有子查询的情况下执行此操作:
select ur.*,
coalesce(ur.regionname,
max(case when DefaultFlag = '1' then regionname end) over ()
) as regionname,
coalesce(ur.regionid,
max(case when DefaultFlag = '1' then regionid end) over ()
) as regionid
from #UserRegion ur;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句