Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mr.Guardião

[Resolvido] Como mostrar resultados na horizontal

Recommended Posts

Olá pessoal

 

Estou com um pesqueno grande problema.

Tenho um banco de dados o qual um dos clientes tenho que gerar um relatório de todos os registros da tabela

porém está com mais de 30mil registros

 

bom... usando um método tradicional até gera... mas demora pacas.

pois a rotina está sendo executada pela programação.

 

O que necessito é conseguir com que a query, já me traga o maior números de informações agrupadas.

É um relatório anual

 

e para cada equipamento (registro) tem uma coluna chamada semana e outro chamada periodicidade

 

então vamos ao exemplo prático

++++++++++++++++++++++++++++++++++++++++++++++++++++++
SEMANAS			| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | etc ... 
-------------------------------------------------------------------------------------------------
Eqto 001		| t | m | - | - | - | - | t | m | - | t | - | t	
-------------------------------------------------------------------------------------------------
Eqto 002		| t | m | - | t | - | t | t | m | - | - | - | t	
-------------------------------------------------------------------------------------------------
Eqto 003		| m | m | - | - | - | - | t | t | - | m | - | t	
-------------------------------------------------------------------------------------------------
Eqto 004		| - | t | m | t | - | t | - | m | - | - | m | t	
-------------------------------------------------------------------------------------------------
Eqto 005		| m | t | - | - | - | t | m | t | - | - | - | t	
-------------------------------------------------------------------------------------------------
Eqto 006		| t | m | - | m | - | m | t | m | - | - | - | t	
++++++++++++++++++++++++++++++++++++++++++++++++++++++

Hoje o código está fazendo assim

 

[LOOP A] select distinct(cod_equipamento) from tb_equipamentos

-> ini : loop : equipamentos

[LOOP B] select from tb_equipamentos where cod_equipamento = cod_equipamento [LOOP A]

-> ini : loop : itens

 

exibe as semanas e os itens

 

-> next : loop : itens

-> next : loop : equipamentos

 

 

 

os números

são em média 600 equipamentos x 52 semanas

então ele executa as query 31200 vezes

 

 

O query ver se conseguia era criar uma query que já mostrasse as 52 colunas(semanas) na query que agrupa os equipamentos

 

Alguém teria alguma idéia... toda será bem vinda

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

mr.

 

se for SQL2005, tem a funcao PIVOT TABLE.

Se for SQL2000, de uma olhada aki:

http://forum.imasters.com.br/index.php?showtopic=224865

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, infelizmente este código não irá servir

Eu cheguei a alterar aquele código colocando minhas tabelas e tals... criei um procedure para executar

 

E demorou em média 1,30 segundos para retornar a consulta, isto no Query Analyzer

 

Sendo que uma Query normal:

 

SELECT DISTINCT(EQPTO.cod_equipamento), EQPTO.nome_equipamento, EQPTO.semana, EQPTO.periodicidade
	FROM CTE_programa_preventiva EQPTO
		INNER JOIN CTE_programa_preventiva ITEM ON ITEM.cod_equipamento = EQPTO.cod_equipamento
	WHERE EQPTO.status = 'A' AND EQPTO.cod_cliente = 9
ORDER BY EQPTO.nome_equipamento

demora média de 5 segundos para retornar os resultados... porém retorna 31200 linhas

ai no código ASP que fica a complicação, demora pacas para montar na ordem que preciso.

 

Já tentei usando getRows, demora 80 segundos para exibir

Então queria uma forma de transformar tudo num Grid, porém este esquema da coluna não irá ajudar muito

 

Ah! antes de você indicar, eu já havia visto e testado este esquema.

 

Mas valeu a tentativa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO]

 

Depois de muito procurar na internet

Descobri algo simular ao PIVOT do SQL 2005

 

Vejam o exemplo abaixo

Só para terem uma idéia... um relatório que demorava cerca de 80 segundos para exibir em tela, agora demora no máximo 6 segundos.

Já mostrando em formato html

 

CREATE TABLE Foo (
personid INT,
child INT,
answer CHAR(2),
PRIMARY KEY (personid, child))

INSERT INTO Foo VALUES (1, 1, 'A1')
INSERT INTO Foo VALUES (1, 2, 'A2')
INSERT INTO Foo VALUES (1, 3, 'A3')
INSERT INTO Foo VALUES (1, 4, 'A4')
INSERT INTO Foo VALUES (2, 1, 'B1')
INSERT INTO Foo VALUES (2, 2, 'B2')

-- SQL Server 2000
SELECT personid,
MAX(CASE WHEN child = 1 THEN answer END) AS answer_1,
MAX(CASE WHEN child = 2 THEN answer END) AS answer_2,
MAX(CASE WHEN child = 3 THEN answer END) AS answer_3,
MAX(CASE WHEN child = 4 THEN answer END) AS answer_4
FROM Foo
GROUP BY personid

-- SQL Server 2005
SELECT personid,
[1] AS answer_1,
[2] AS answer_2,
[3] AS answer_3,
[4] AS answer_4
FROM Foo
PIVOT
(MAX(answer)
FOR child IN ([1], [2], [3], [4])) AS P;

Que sirva para outro também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.