识别多列的行匹配

时间:2010-08-11 06:38:11

标签: sql

根据调查的是/否答案,我获得了一个由'1'和'0'填充的表格。我被要求确定所有完全不同的答案,即对问题1,17,23,234和238回答“是”的人。 有许多列(500+),因此很多回答排列。 有什么想法吗?

4 个答案:

答案 0 :(得分:1)

使用文本编辑器或使用数据库工具生成列名列表

然后就这样做

select max(person_id)
from answer_table 
group by (
  a1,a2,a3,....  -- paste list of columns here.
  )
having count(
  a1,a2,a3....
  ) = 1; -- return only answer sets that have no duplicate

max(person_id)会在不破坏GROUP BY的情况下提取单人ID。

答案 1 :(得分:0)

你提到的具体数字有点令人困惑:它们只是一个例子吗?

你知道sql中的DISTINCT语句吗?那,并正确选择您想要的列,可以解决您的问题。

Byron的答案(现已删除:它有一个选择不同,长手写的所有500列)是好的,并且使用显式列名,这在许多情况下是很好的做法。如果您想要更短的表示法,您的sql版本可能支持Select Distinct *

答案 2 :(得分:0)

select count(distinct col_name) from table_name where answer = '1' and id in (1,17,23,234,238)

答案 3 :(得分:0)

以下陈述假设您的输入为2,3且列名为2Q,3Q ......

DECLARE @QueryInput VARCHAR(100)
DECLARE @Query nVARCHAR(4000)
SET     @QueryInput = '2,3'
SET     @QueryInput = REPLACE(@QueryInput,',','=1 AND Q')
SET     @QueryInput = 'Q'+@QueryInput
SET     @QueryInput = @QueryInput+'=1'

PRINT   @QueryInput

SET     @Query = 'SELECT * FROM answer_table WHERE  '+@QueryInput
PRINT   @Query
EXEC SP_EXECUTESQL @Query