我正在尝试根据其他列(Level5
和Selection
)派生一个列(IsAssetCode
)。
Selection
列有两种类型的条目 - “所有资产”和“核心资产”,IsAssetCode
是0
或1
。 IsAssetCode = 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
答案 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;
}