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