4

次のようなテーブルがあります。

Answer1,Answer2,Answer3,Answer4  
A,B,C,C  
B,D,D,D  
C,C,A,C  
B,B,D,D

4 つの回答すべての出現回数が最も多いものを見つけたいのですが、出現回数が同じ場合は、最初の値だけが必要です。したがって、理想的には、次のような出力テーブルが必要です。

Answer1,Answer2,Answer3,Answer4,MostAnswers,Occurrences  
A,B,C,C,C,2  
B,D,D,D,D,3  
C,C,A,C,C,3  
B,B,D,D,B,2

SQLサーバーでこれを行うにはどうすればよいですか? 列ごとにグループ化できますか?

4

2 に答える 2

5

Id列の存在を前提とする別のアプローチ:

select 
  a.Id,
  a.Answer1, 
  a.Answer2, 
  a.Answer3, 
  a.Answer4,
  TopAnswers.*
from AnswerTable a
outer apply (
  select top 1 Answer, count(*) as cnt
  from (
    select Answer1 as Answer from AnswerTable where Id = a.Id
    union all
    select Answer2 from AnswerTable where Id = a.Id
    union all
    select Answer3 from AnswerTable where Id = a.Id
    union all
    select Answer4 from AnswerTable where Id = a.Id
  ) x
  group by Answer
  order by count(*) desc, Answer asc
) TopAnswers

SQLFiddle は次のとおりです。http://sqlfiddle.com/#!3/b1dfd/8

于 2013-08-29T14:43:04.087 に答える