2015-11-25 29 views
0

下面的代碼會生成大約300行,但只有一小部分在列「Unit = 3」中有任何值。其餘的值爲空值,因此存在列「ekod」中的許多重複值。SQL Server,刪除選擇案例查詢中的空值

有誰知道如何在列「unit = 3」中刪除所有具有空值的行嗎?

此致敬禮!

結果:

ekod unit=3  
0004 NULL 
0114 15 
0114 NULL 
0114 NULL 
0120 NULL 
0120 NULL 
0120 46 
0120 NULL 

代碼:

select 
    A.ekod 
    ,case when A.unit='3' then count(*) end AS [Unit=3] 
    from [Stat_unitdata].[dbo].[XXX_YYY] A 
    group by a.ekod, a.unit 
    order by ekod 

回答

4

您可以使用sum

select 
A.ekod 
,sum(case when a.unit='3' then 1 else 0 end) AS [Unit=3] 
from [Stat_unitdata].[dbo].[XXX_YYY] A 
group by a.ekod 
order by ekod 
+0

是不是通過導致額外的記錄在組中的「a.unit」?所以'有A.Unit = 3'也會有幫助?在選擇中缺乏顯示a.unit隱藏了一個事實,ekod是從我認爲不同的a.units中複製出來的。 – xQbert

+0

@ xQbert..removed'unit' from'group by'。 –

+0

提供更簡單,更清晰的答案:P,但我認爲這可能會失敗......我不確定沒有小組的情況下,案例陳述是如何工作的;但它可能沒有問題,因爲它現在嵌套在一個總和中。 – xQbert

2

作爲一個說明,如果你不與零個單位關心ekod S:

select a.ekod, count(*) as [Unit=3] 
from [Stat_unitdata].[dbo].[XXX_YYY] a 
where a.unit = '3' 
group by a.ekod 
order by a.ekod; 

這僅返回ekod有至少一個unit = '3' 值。

+0

感謝您的幫助!實際上,我首先需要刪除所有零值,但稍後改變了我的想法! – user2995808