2016-02-16 38 views
2

假設我有這樣的表:用值x計數列至少一次

A B C 
------------ 
1 0 0 
0 0 1 
1 0 1 
0 0 0 

我需要列的計數,其中1發生時(不論它發生的次數)。所以在這個例子中,計數爲2,因爲它出現在2列A & C. 這怎麼能在SQL服務器中完成?

編輯:從意見

也許固定的列數,但未知

+0

是固定的或動態的列數? – WiSeeker

+0

它不知道。所以...亞..動態... 其實它的固定,只是不知道。 – adityawho

+0

多麼奇怪的要求。所以你沒有一定數量的欄目來看?這聽起來像我的動態SQL。 –

回答

1

像下面會給你正確的結果,如果列數是已知的,未知號碼此查詢欄查詢可以做成動態的。

SELECT 
    MAX(CASE WHEN colA = 1 THEN 1 ELSE 0 END) + 
    MAX(CASE WHEN colB = 1 THEN 1 ELSE 0 END) + 
    MAX(CASE WHEN colC = 1 THEN 1 ELSE 0 END) + 
    --... 
    MAX(CASE WHEN colZ = 1 THEN 1 ELSE 0 END) as CountOfColumns 
FROM tableT 

下面是一個動態查詢:

declare @q varchar(max) 

select 
    @q= 'select ' + 
     stuff((
     select 
      '+ MAX(CASE WHEN ' + C.name + ' = 1 THEN 1 ELSE 0 END) ' 
     from 
      sys.columns C inner join sys.tables T 
       on C.object_id=T.object_id and T.name='tableT' 
     for xml path('')),1,1,'') 
     + ' as CountOfColumns FROM tableT' 

exec(@q) 
+0

如何讓它動態? – adityawho

+0

@ stylojack_10添加了動態查詢。如果您覺得有用,請投票表決。 – DhruvJoshi

相關問題