我有这个调查表,我正在尝试收集回答的用户 ID 的信息非常同意我正在尝试观察我的体重的问题,或者我喜欢喝黑咖啡,并且必须回答同意 或中立或强烈不同意 这些问题当最后期限临近时 ,我会茁壮成长,我只想尝试新事物。
UserId QUESTION Answer
1010 I am trying to watch my weight Strongly Agree
1120 I thrive when a deadline is close Strongly Agree
1120 I'm all about trying something new Neutral
2025 I'm all about trying something new Agree
3024 I love drinking Coffee Black Strongly Disagree
3024 I'm all about trying something new Agree
我尝试编写的查询不断返回我没有编写的问题。这可能不是编写此类查询的最佳方式,但我正在学习如何正确编写这些查询。任何帮助,将不胜感激。
SELECT userid_
,QUESTION
,answer
FROM [Survey_2019]]
Where QUESTION = 'I'm trying to watch my weight' AND
Answer = 'Strongly agree'
OR
QUESTION = 'I love drinking Coffee Black
AND
Answer = 'Strongly agree'
AND
QUESTION= 'I thrive when a deadline is close'
AND ANSWER= 'Agree'
OR 'Neutral' OR 'Strongly Disagree'
简化:
在 SQL 中:
如果您需要匹配的单独记录,则将此 SQL 用作 CTE/子查询并从源表的另一个副本中选择单独的记录。
更新
似乎最后两个条件可以使用简化条件合并为一个
但问题是确保提到所有(在这种情况下为 2 个)问题。是的,这是可能的,并且可以使用例如
如果您需要确保没有感兴趣的问题和答案不在列表中的记录,则使用类似于以下的附加条件
首先:您缺少许多括号(无论如何)。
然后:您需要将不同的记录组合成一个结果。@Akina 展示了一种方法。或者,您可以针对同一个表的两个副本运行:
查看实际操作:SQL Fiddle(已将两条记录添加到您的示例数据中以进行实际匹配。)
如果您主要关心满足条件的用户列表,Akina 的详细方法更合适。(但您当然可以按照 Akina 的建议对其进行扩展。)我的直接提供所有详细信息 - 但如果您的数据可能会为某些用户生成多个匹配项,则可能会变得难以接受。
然而,Akina 和我对我的方法第 2 部分中的内容的解读有所不同: Akina 期望这两个问题都有答案,如果至少有一个问题得到了回答,我会很满意。- 你最清楚,哪一个是正确的。(两条 SQL 语句都可以做相应的调整。)
您的桌子设计可能/希望仍在开发中…… ;-)
如果需要调整/进一步详细信息,请发表评论。