我有一个像这样设置的表:
Name QuestionCd Response
John Smith 837987 3
John Smith 837988 NULL
John Smith 837991 3
John Smith 837996 3
John Smith 838003 NULL
Mary Smith 837987 1
Mary Smith 837988 1
Mary Smith 837991 3
Mary Smith 837996 1
Mary Smith 838003 5
我需要引入对所有5个问题都有回应的客户,即Mary Smith。我曾尝试使用case语句来标记有响应的行,但由于John Smith没有回答所有问题,因此这是不正确的。
我尝试了以下内容:
- '837987'和'838069'之间的QuestionCd和响应为空的情况然后''else'X'结束
- '837987'和'838069'之间的QuestionCd和响应为空的情况然后'' 当'837987'和'838069'之间的QuestionCd和Response不为null时,'x'结束
有关如何完成此任务的任何想法或提示?谢谢你的帮助。
答案 0 :(得分:1)
我就是这样做的。
SELECT Name
FROM
(
SELECT Name, QuestionCd
FROM <YourTable>
WHERE NOT Response IS NULL
GROUP BY Name, QuestionCd
) SQ
GROUP BY Name
HAVING COUNT(QuestionCd)=5
子查询是要有一个独特的问题列表,因为Mary Smith或John Smith可能已回答了多个问题。
答案 1 :(得分:0)
如果问题ID已修复,您只需返回已回答5个独特问题的人的姓名
SELECT Name FROM tbl
GROUP BY Name
HAVING count(QuestionCD) = 5
编辑 - 修复SQL