在SQL中查找多列中的大多数事件

See*_*een 4 sql t-sql sql-server

我有这样一张桌子:

Answer1,Answer2,Answer3,Answer4  
A,B,C,C  
B,D,D,D  
C,C,A,C  
B,B,D,D
Run Code Online (Sandbox Code Playgroud)

我想找到所有四个答案的最多出现次数,如果出现次数相同,我只需要第一个值.理想情况下,我应该有一个像这样的输出表:

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
Run Code Online (Sandbox Code Playgroud)

我怎样才能在sql server中执行此操作?我可以逐行进行分组吗?

Cri*_*scu 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
Run Code Online (Sandbox Code Playgroud)

这是SQLFiddle:http://sqlfiddle.com/#!3/b1dfd/8