我有一个存储调查问题信息的表,我正在寻找基于性别、种族等的计数我的问题是我必须在 where 子句中多次引用相同的列,而我不是确定最好的方法。
例子:
我需要知道对调查问题 24 回答“是”以及对问题 4、16 或 24 回答“是”的所有人的数量。我尝试过使用 Or 语句和 IN 语句,但两者都不适合我。我正在考虑在 WHERE 子句中使用 case 语句,但不确定它需要是什么样子。任何帮助或建议将不胜感激!
with TheTotal as
(select count(table.name_id)over (partition by
table.other_id) as blah
where sex='M'
AND table.date between '2019-01-01' and '2019-09-30'
AND (table.jq_nbr=35 AND table.answer='Y')
AND (
(jq_nbr=4 and answer='Y')
OR (jq_nbr=16 and answer='Y')
OR (jq_nbr=24 and answer='Y')
)
拥有您的架构将有助于您的特定查询。如果没有完整的模式,这里有一些关于如何编写查询来获取结果的指针。
假设您有一个
dbo.SurveyResults
表,其中有一些 ID (survey_id
) 用于识别给定用户响应的所有结果,您可以使用如下逻辑:该查询看起来像这样:
对于稍微不同的架构,可能有一个“标题”表 (
dbo.Survey
),每个用户完成的调查有一行,另一个表 (dbo.SurveyResults
) 是一个子表,每个问题回答一个行。有了这个,您可以使用稍微不同的“简单英语”描述,这可能会产生稍微不同的逻辑:该查询可能如下所示:
您可以嵌套您的
CASE
语句,如下所示:您可以使用 开始
CASE
和终止每个语句,如果它是最外层的还是仅在 a 中,您END
可以选择添加它,并且您想要一个与之关联的列名。AS <alias>
CASE
SELECT