Mega Tutorial Grátis

Consulta de referência cruzada

Consulta de referência cruzada no SQL

Hoje vamos ver um modo simples para criarmos uma consulta de referência cruzada no SQL. Só uma observação: o banco que uso é o MS-SQL 2005.

Cenário
Imaginemos que você criou, na empresa, uma aplicação de pesquisa de satisfação para medir o desempenho da unidade que você trabalha, por exemplo, a área de Marketing. Foi desenhado todo o processo da pesquisa, quem responderia e tudo mais.

Ficou decidido que o banco de dados armazenaria informações entre 1 e 6, onde 1 para “não tenho perspectivas para opinar” e 6 para “excelente ou satisfeitíssimo”.

Um dos problemas que tive para realizar uma atividade semelhante foi a construção de uma consulta de referência cruzada. Vi na internet diversas formas para tal: consulta que cria tabelas temporárias… criar tabelas para armazenar valores e outras consultas para criar novas tabelas e mais consultas para criar tabelas… Enfim, muitas coisas, mas nada prático.

E o que fiz então:

Criar tabela onde as respostas seriam armazenadas:

CREATE TABLE [dbo].[tRespostas](
[id] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, –usuário/ip (controle para não responderem diversas vezes)
[anomesref] [nvarchar](4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, –anomes de referência
[item01] [numeric](1, 0) NULL, –questão 1
[item02] [numeric](1, 0) NULL,–questão 2
[item03] [numeric](1, 0) NULL –questão 3
) ON [PRIMARY]

Populando a tabela:

 

Executando a consulta…

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

SELECT anoMesRef, COUNT(anoMesRef) as tRespostas, –total de respostas
/*QUESTÃO 01*/
COUNT(CASE WHEN item01 = 1 THEN (item01) END) AS [tItem01_01],–conta respostas = 1
COUNT(CASE WHEN item01 = 2 THEN (item01) END) AS [tItem01_02],–conta respostas = 2
COUNT(CASE WHEN item01 = 3 THEN (item01) END) AS [tItem01_03],–conta respostas = 3
COUNT(CASE WHEN item01 = 4 THEN (item01) END) AS [tItem01_04],–conta respostas = 4
COUNT(CASE WHEN item01 = 5 THEN (item01) END) AS [tItem01_05],–conta respostas = 5
COUNT(CASE WHEN item01 = 6 THEN (item01) END) AS [tItem01_06],–conta respostas = 6

/*QUESTÃO 02*/
COUNT(CASE WHEN item01 = 1 THEN (item02) END) AS [tItem02_01],–conta respostas = 1
COUNT(CASE WHEN item01 = 2 THEN (item02) END) AS [tItem02_02],–conta respostas = 2
COUNT(CASE WHEN item01 = 3 THEN (item02) END) AS [tItem02_03],–conta respostas = 3
COUNT(CASE WHEN item01 = 4 THEN (item02) END) AS [tItem02_04],–conta respostas = 4
COUNT(CASE WHEN item01 = 5 THEN (item02) END) AS [tItem02_05],–conta respostas = 5
COUNT(CASE WHEN item01 = 6 THEN (item02) END) AS [tItem02_06],–conta respostas = 6

/*QUESTÃO 03*/
COUNT(CASE WHEN item01 = 1 THEN (item03) END) AS [tItem03_01],–conta respostas = 1
COUNT(CASE WHEN item01 = 2 THEN (item03) END) AS [tItem03_02],–conta respostas = 2
COUNT(CASE WHEN item01 = 3 THEN (item03) END) AS [tItem03_03],–conta respostas = 3
COUNT(CASE WHEN item01 = 4 THEN (item03) END) AS [tItem03_04],–conta respostas = 4
COUNT(CASE WHEN item01 = 5 THEN (item03) END) AS [tItem03_05],–conta respostas = 5
COUNT(CASE WHEN item01 = 6 THEN (item03) END) AS [tItem03_06]–conta respostas = 6

FROM tRespostas
WHERE anomesRef = ‘0707’ –ano 07 e mês 07
GROUP BY anoMesRef

Resultado da pesquisa:

 

Obs.: Resultado considerando apenas o retorno do ITEM 01.

Autor : Ricardo SantAnna é formado em Sistemas de Informação pela Universidade de Santo Amaro e trabalha atualmente na SABESP, em Itapetininga, na Gestão Comercial e Marketing e tem como uma das atribuições o desenvolvimento de aplicações de controle e acompanhamento de processos.