2012-05-15 122 views
3

我試圖在連續4倍獨立的列數不同的條目,然後總的結果。多列條件計數SQL

例如表頭類似於此:

ID  Col1 Col2 Col3 Col4 

每一列(保存ID)可以具有文本值W,X,Y,或Z列可以具有相同的值。

我所試圖做的是圖的方法在列計算每個條目,但每行只能算W,X,Y和Z一次。所以,如果:

ID  Col1 Col2 Col3 Col4 
      X  X  Y 
      Y  W  X 
      Z  Y  Y 

結果表將是:

Value Count 
     W  1 
     X  2 
     Y  3 
     Z  1 

任何幫助將不勝感激。

回答

3

也許我失去了一些東西,但由於這會是非常簡單的:

Select Val, Count(*) 
From (
     Select Id, Col1 As Val From Table1 
     Union Select Id, Col2 From Table1 
     Union Select Id, Col3 From Table1 
     Union Select Id, Col4 From Table1 
     ) As Z 
Where Z.Val Is Not Null 
Group BY Z.Val 

沒有理由使用DistinctUnion在一起Union將會使結果不同。因此,我們需要包含每行的唯一值(Id)。

SQL Fiddle(該使用SQL Server,但相同的語法將在MS Access工作)

+0

+1非常聰明的工作對我罰款。你是對的,就是這麼簡單:) – mellamokb

+0

感謝您的幫助!這很好。 – dooms13

3

像這樣的東西應該爲你的榜樣4箱子做到這一點:

select 'W' as [Value], count(*) as Count from Table1 
    where Col1='W' or Col2='W' or Col3='W' or Col4='W' union 
select 'X' as [Value], count(*) as Count from Table1 
    where Col1='X' or Col2='X' or Col3='X' or Col4='X' union 
select 'Y' as [Value], count(*) as Count from Table1 
    where Col1='Y' or Col2='Y' or Col3='Y' or Col4='Y' union 
select 'Z' as [Value], count(*) as Count from Table1 
    where Col1='Z' or Col2='Z' or Col3='Z' or Col4='Z' 

演示:http://www.sqlfiddle.com/#!3/68aa3/11


編輯:如果有很多可能的值,這可以進一步簡化通過unioning所有可能的值,並將其動態計數:

select V.Value as [Value], 
    count(IIF(col1=[Value] or col2=[Value] 
      or col3=[Value] or col4=[Value],1,NULL)) as [Count] 
from Table1, (
    select distinct col1 as [Value] from table1 union 
    select distinct col2 from table1 union 
    select distinct col3 from table1 union 
    select distinct col4 from table1) V 
where V.value is not null 
group by V.value 
+0

感謝,這正是我一直在尋找! – dooms13

+1

+1爲sqlfiddle! – renegadeMind

+2

你的第二個示例使用案例,它不是在MS Access可用(見標籤) – Fionnuala