2010-08-11 48 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