我有一个包含如下数据的表格,
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为空,那么它应该从可用的regionname和regionid中选择regionname和region id,其中Defaultflag =1。
任何帮助都将不胜感激。
发布于 2016-08-15 07:00:03
你的数据结构看起来很差。为什么默认设置与用户一起存储?
在任何情况下,这可能会完成您想要的操作:
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;https://stackoverflow.com/questions/38947349
复制相似问题