2013-04-30 24 views
3

我無法弄清楚如何創建一列與其他列的內容的行數。 沒有對所有列(*)計數內容爲特定列數的內容計數行

------------------------- Output should be (NO COLUMN D): --------- 
| A | B | C | D |          | Count | 
-------------------------          --------- 
| foo | foo | foo | foo |          | 9 | 
-------------------------          --------- 
| bar | bar | bar | bar | 
------------------------- 
| x | x |  | x | 
------------------------- 
| y |  |  | y | 
------------------------- 

我已經試過許多方法,如:

  • SELECT SUM(COUNT(A) + Count(B) + COUNT(C)) from SomeTable
  • SELECT COUNT(A + B + C)
  • SELECT COUNT(A,B,C)

我可以」找到正確的語法。有人能幫我解決這個問題嗎?

+0

@TimSchmelter這是我第一次的猜測。但是當我做第一個時,我得到了'不能對包含聚集或子查詢的表達式執行聚合函數。' – phadaphunk 2013-04-30 13:35:23

回答

5
SELECT SUM(CASE WHEN A IS NULL THEN 0 ELSE 1 END) 
    + SUM(CASE WHEN B IS NULL THEN 0 ELSE 1 END) 
    + SUM(CASE WHEN C IS NULL THEN 0 ELSE 1 END) 
    AS [TOTAL] 
FROM dbo.SomeTable 

Demo

+0

你簡直太棒了我只是想打開我的SQL服務器,你也做了一個演示以及... + 1 – NetStarter 2013-04-30 13:38:38

+0

偉大的答案謝謝。 – phadaphunk 2013-04-30 13:45:46

1

遇到同樣的錯誤昨天。這是我解決它的方式。

Select Count(sum) from 
(select 
count(A) as sum 
from sometable 
where ISNULL(A,'')<>'' 
,select 
count(B) as sum 
from sometable 
where ISNULL(B,'')<>'' 
,select 
count(C) as sum 
from sometable 
where ISNULL(C,'')<>'' 
)t 
+1

是最後的't'錯誤嗎? – phadaphunk 2013-04-30 13:37:40

+0

沒有.....但't'不應該是**現有表的名稱** – Luv 2013-04-30 13:38:35

+0

很好,非常感謝! – phadaphunk 2013-04-30 13:39:41