您好我有一个返回此
的查询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
答案 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