Banco de Dados

19 nov, 2007

Consulta de referência cruzada

Publicidade

Olá pessoal. Antes de iniciar essa matéria, gostaria de agradecer os comentários, as críticas e as sugestões que venho recebendo.

Como já foi anunciado na última matéria, 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.

Entre em contato para dúvidas, sugestões e críticas…

Aquele abraço!