簡體   English   中英

嘗試在SQL Server中使用CASE語句

[英]Trying to use CASE statement in SQL Server

我有數據表,如下所示,

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,那么它應該從可用的regionname和regionid中選擇regionname和region id,其中Defaultflag = 1。

任何幫助將不勝感激。

您似乎的數據結構非常糟糕。 為什么默認值與用戶一起存儲?

在任何情況下,這可能會做你想要的:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM