使用Case语句时获取Null值

时间:2017-09-24 13:12:37

标签: sql sql-server-2008

我正在尝试根据其他列(Level5Selection)派生一个列(IsAssetCode)。

Selection列有两种类型的条目 - “所有资产”和“核心资产”,IsAssetCode01IsAssetCode = 0对应“所有资产”,1为“核心资产”。

我正在尝试分离核心和非核心资产,但我在Level5中获得了“所有资产”的额外行。

Select *, 
   Case when Selection ='All Assets' then 'Other Assets'
        When (IsAssetCode =1 and Selection <> 'ALL ASSETS') THEN Selection
   End  as Level5
From ((Select (columns) from tbl where IsAssetCode = 0
      EXCEPT
      SELECT (Columns) FROM tbl where IsAssetCode = 1)
      Union
      Select (column) from tbl where IsAssetCode = 1
     )

输入数据:

B1  Black  All Assets  0
B1  White All Assets   0
B1  Red     All Assets  0
B1  Black  Core Asset 1

期望的输出:

B1 Black    Core Asset  1
B1 White   Other Asset  2
B1 Red      Other Asset  2

2 个答案:

答案 0 :(得分:0)

请始终标记使用的RDBMS,我假设是SQL-Server。

当没有条件时,CASE EXPRESSION的默认值是NULL,所以我的猜测 - 所有行都包含&#34;所有资产&#34;有IsAssetCode&lt;&gt; 1对吗?

要覆盖此内容,您可以使用ELSE

CASE WHEN <Cond> Then <FirstVal>
     WHEN <Cond2> Then <SecondVal>
     ELSE <IfNonOfAboveVal>
END

或者只是提供一个不同的条件来捕捉一切。

答案 1 :(得分:0)

只需使用COUNT()和GROUP BY即可获得所需的计数

 public int size()
{
     Element tmp = first;
     int cnt =0;
     while(temp != null)
     {
         cnt++;
         temp = temp.next
     }
      return cnt;

}