2010-08-11 47 views
0

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

+0

哪个RDBMS,你可以提供一些样品的输入和输出? – 2010-08-11 06:47:48

+0

SQL Server 2000. 不幸的是,我没有任何示例数据(需要上传542个问题)。该调查在我们发言时正在完成,因此我已经了解了该桌子的外观。 Tought我会尽我的功课.... – Leem 2010-08-11 06:57:19

回答

0

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

您是否知道sql10中的DISTINCT语句?那,并正确选择你想要的列,应该可以解决你的问题。

拜伦的答案(现在删除:它有一个选择截然不同,所有500列写出长手)是好的,并使用明确的列名称,这在许多情况下是很好的做法。如果你想缩短表示法,你的sql版本可能支持Select Distinct *

+0

提到的数字只是一个例子。 我必须承认,我并不知道DISTINCT子句可以用于多列(新手爱好者 - 抱歉)。 – Leem 2010-08-11 07:02:37

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

我认为每一列代表问题,每一行代表用户输入 – Adeel 2010-08-11 06:46:41

+0

正确,给出的数字只是一个例子,但无论如何感谢 – Leem 2010-08-11 07:06:22

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。

+0

啊,我对不同答案的解释也包括不同的人,但这可能不正确。 – Tobiasopdenbrouw 2010-08-11 06:52:50

+0

只有某些与填写表格的人有关的问题。我相信(和希望)这些将被赋予一个独特的ID。我可以忽略GROUP BY子句中的那些列名。 – Leem 2010-08-11 06:59:49

+0

哦,是的哎呀...那里会有一个人的ID在那里不会有....好的,代码编辑。 – 2010-08-11 14:48:28

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'[email protected] 
SET  @QueryInput = @QueryInput+'=1' 

PRINT @QueryInput 

SET  @Query = 'SELECT * FROM answer_table WHERE '[email protected] 
PRINT @Query 
EXEC SP_EXECUTESQL @Query