首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在SQL Server中使用CASE语句

尝试在SQL Server中使用CASE语句
EN

Stack Overflow用户
提问于 2016-08-15 06:57:19
回答 1查看 43关注 0票数 1

我有一个包含如下数据的表格,

代码语言:javascript
复制
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。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-15 07:00:03

你的数据结构看起来很差。为什么默认设置与用户一起存储?

在任何情况下,这可能会完成您想要的操作:

代码语言:javascript
复制
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;

这假设只有一行设置了默认标志。

我要注意的是,您可以在不使用子查询的情况下执行此操作:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38947349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档