调查结果的Sql问题

时间:2014-06-02 12:14:35

标签: sql sql-server

您好我有一个返回此

的查询
member_id   question_variable                                  response_id label
----------- -------------------------------------------------- ----------- ----------------------------
35          area                                               15          Sydney (Metro)
35          relationship_status                                8           Single
35          education                                          31          Bachelor Degree
35          house_hold_income                                  4           $75,001 to $100,000
35          pets                                               36          Dog
35          pets                                               37          Fish

我如何检测重复的结果,例如宠物,并且有response_id = 36,37和label = Dog,Fish 像这样

member_id   question_variable                                  response_id label
----------- -------------------------------------------------- ----------- ----------------------------
35          area                                               15          Sydney (Metro)
35          relationship_status                                8           Single
35          education                                          31          Bachelor Degree
35          house_hold_income                                  4           $75,001 to $100,000
35          pets                                               36,37          Dog,Fish

3 个答案:

答案 0 :(得分:8)

您必须使用关键字 STUFF 才能获得上述结果。

QUERY:

SELECT DISTINCT T1.MEMBER_ID,T1.QUESTION_VARIABLE,
  STUFF((SELECT DISTINCT ',' + T2.RESPONSE_ID
         FROM TEST T2
         WHERE T1.QUESTION_VARIABLE = T2.QUESTION_VARIABLE
            FOR XML PATH('') ),1,1,'') AS RESPONSE_ID,
  STUFF((SELECT DISTINCT ',' + T2.LABEL
         FROM TEST T2
         WHERE T1.QUESTION_VARIABLE = T2.QUESTION_VARIABLE
            FOR XML PATH('') ),1,1,'') AS LABEL         

FROM TEST T1
;
  

这里是SQL FIDDLE的链接   http://sqlfiddle.com/#!3/64515/3

答案 1 :(得分:1)

这也可以通过以下方式实现。我还没有机会对大数据集进行测试。 如果要检查性能,请启用以下

SET STATISTICS IO ON
SET STATISTICS TIME ON

<强>查询:

SELECT  Main.member_id,
        Main.question_variable, 
        STUFF(SubResponse.response_id,1,1,'') AS response_id,
        STUFF(SubLebel.label,1,1,'') AS label
FROM Member Main
CROSS APPLY
(
    SELECT  ',' + response_id 
    FROM Member 
    WHERE member_id = Main.member_id AND question_variable = Main.question_variable
    FOR XML PATH('')
) SubResponse (response_id)
CROSS APPLY
(
    SELECT  ',' + label 
    FROM Member 
    WHERE member_id = Main.member_id AND question_variable = Main.question_variable
    FOR XML PATH('')
) SubLebel (label)

GROUP By Main.member_id,
         Main.question_variable,
         SubResponse.response_id,
         SubLebel.label

答案 2 :(得分:-1)

SELECT member_id, question_variable, count(*) 
FROM MyData 
GROUP BY member_id, question_id
HAVING COUNT(*) > 1