如何根据SQL中的列值排除数据?

时间:2014-05-13 23:41:09

标签: sql

我有一个像这样设置的表:

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'结束

有关如何完成此任务的任何想法或提示?谢谢你的帮助。

2 个答案:

答案 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