3

行の4つの別々の列の個別のエントリをカウントして、結果を合計しようとしています。

たとえば、テーブルヘッダーは次のようになります。

ID       Col1    Col2    Col3    Col4

各列(保存ID)は、テキスト値W、X、Y、またはZを持つことができます。列は同じ値を持つことができます。

私がやろうとしているのは、列の各エントリをカウントする方法を考え出すことですが、W、X、Y、およびZは行ごとに1回だけカウントします。したがって、次の場合:

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

結果テーブルは次のようになります。

    Value    Count
      W        1
      X        2
      Y        3
      Z        1

どんな助けでも大歓迎です。

4

2 に答える 2

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


編集: 可能な値がたくさんある場合は、すべての可能な値を結合して動的にカウントすることで、これをさらに単純化できます。

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
于 2012-05-15T14:59:33.763 に答える
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で機能します)

于 2012-05-15T15:17:47.933 に答える