Eu tenho uma tabela que armazena informações de perguntas da pesquisa e estou procurando uma contagem com base em sexo, raça etc. Meu problema é que tenho que fazer referência às mesmas colunas várias vezes na cláusula where e não estou certeza a melhor maneira de fazer isso.
exemplo:
Eu preciso saber a contagem de todas as pessoas que responderam sim à pergunta 24 da pesquisa E TAMBÉM sim às perguntas 4 ou 16 ou 24. Eu tentei mexer com declarações Or e IN, mas ambas não estão funcionando para mim. Eu estava olhando para usar uma instrução case na cláusula WHERE, mas não tenho certeza de como isso precisaria ser. Qualquer ajuda ou conselho seria muito apreciado!
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')
)
Ter seu esquema seria útil para ajudar com sua consulta específica. Sem o esquema completo, aqui estão algumas dicas de como você pode escrever uma consulta para obter seus resultados.
Supondo que você tenha uma única
dbo.SurveyResults
tabela, onde há algum ID (survey_id
) que é usado para identificar todos os resultados das respostas de um determinado usuário, você pode usar uma lógica mais ou menos assim:Essa consulta ficaria mais ou menos assim:
Com um esquema um pouco diferente, talvez haja uma tabela "cabeçalho" (
dbo.Survey
) que tenha uma linha por pesquisa concluída pelo usuário e outra tabela (dbo.SurveyResults
) que seja uma tabela filha que tenha uma linha por pergunta respondida. Com isso, você pode usar uma descrição de "inglês simples" um pouco diferente, que pode gerar uma lógica um pouco diferente:Essa consulta pode ficar assim:
Você pode aninhar suas
CASE
instruções da seguinte maneira:Você inicia cada instrução com
CASE
e termina comEND
, com a opção de adicionarAS <alias>
se for a mais externa ou apenasCASE
em aSELECT
e você gostaria de um nome de coluna associado a ela.