AJUDA URGENTE COM SELECT

DEFAVERO 25/03/2010 10:53:30
#337856
Srs,

Criei um select para contar a produção, porém o select ficou tão grande de deu erro ao tentar executar.... O que estou precisando é fazer com que minha tabela faça de linhas colunas... (Tipo uma tabela dinâmica)

Segue o select

sSQL = [Ô] SELECT POSTO, (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]22[ô] AND POSTO = [ô]POSTO01[ô]) AS 22,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]23[ô] AND POSTO = [ô]POSTO01[ô]) AS 23,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]0[ô] AND POSTO = [ô]POSTO01[ô]) AS 00,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]1[ô] AND POSTO = [ô]POSTO01[ô]) AS 01,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]2[ô] AND POSTO = [ô]POSTO01[ô]) AS 02,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]3[ô] AND POSTO = [ô]POSTO01[ô]) AS 03,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]4[ô] AND POSTO = [ô]POSTO01[ô]) AS 04,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]5[ô] AND POSTO = [ô]POSTO01[ô]) AS 05,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]6[ô] AND POSTO = [ô]POSTO01[ô]) AS 06,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]7[ô] AND POSTO = [ô]POSTO01[ô]) AS 07,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]8[ô] AND POSTO = [ô]POSTO01[ô]) AS 08,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]9[ô] AND POSTO = [ô]POSTO01[ô]) AS 09,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]10[ô] AND POSTO = [ô]POSTO01[ô]) AS 10,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]11[ô] AND POSTO = [ô]POSTO01[ô]) AS 11,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]12[ô] AND POSTO = [ô]POSTO01[ô]) AS 12,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]13[ô] AND POSTO = [ô]POSTO01[ô]) AS 13,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]14[ô] AND POSTO = [ô]POSTO01[ô]) AS 14,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]15[ô] AND POSTO = [ô]POSTO01[ô]) AS 15,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]16[ô] AND POSTO = [ô]POSTO01[ô]) AS 16,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]17[ô] AND POSTO = [ô]POSTO01[ô]) AS 17,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]18[ô] AND POSTO = [ô]POSTO01[ô]) AS 18,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]19[ô] AND POSTO = [ô]POSTO01[ô]) AS 19,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]20[ô] AND POSTO = [ô]POSTO01[ô]) AS 20,[Ô]
sSQL = sSQL & [Ô] (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) = [ô]21[ô] AND POSTO = [ô]POSTO01[ô]) AS 21[Ô]
sSQL = sSQL & [Ô] FROM [RELATORIO$] WHERE POSTO = [ô]POSTO01[ô] GROUP BY POSTO[Ô]

Vou unindo os select[ô]s criando novas linhas... Problema é que tenho quase 30 postos de trabalho, então isso fica gigante e não executa....meu banco é Access(Não tem como mudar)... tentei fazer alguns testes com Pivot mas não funciona...

Alguém tem alguma idéia de como posso fazer isso de alguma outra maneira????

To meio desesperado a procura...


So meio leigo ainda no assunto... Mas estamos ai!

att,





PH1959 25/03/2010 11:05:36
#337858
pelo q entendi , este sql aí é do posto01 ....
a pergunta é Relatorio$ 'é uma tabela?
DEFAVERO 25/03/2010 11:09:01
#337859
PH1959,

é do posto 01 e a tabela é Relatorio$...

PH1959 25/03/2010 11:33:33
#337861
beleza e também ficou moleza...
usa um array...

dim listapostostos (npostos, 23) as variant... [ô] substitui npostos pelo numero de postos q vc tiver....
o código abaixo está escrito como se os dados da tabela sejam numericos; se forem strings tem q fazer uma pequena adaptação


for i = 1 to npostos
for j = 0 to 23
if i< 10 then
a= [Ô]POSTO0[Ô] & i
else
a= [Ô]POSTO[Ô] & i
endif

sSQL = [Ô] SELECT POSTO, (SELECT SUM(ROWCONT) FROM [RELATORIO$] WHERE HOUR(HORAINI) =[Ô] & j & [Ô] AND POSTO =[Ô] & a & [Ô])[Ô]

[ô] Agora é só abrir a tabela e jogar os dados no array
listapostos(i,j) = tabela( [Ô]o campo q vc quer[Ô])

depois
next j
next i
DEFAVERO 25/03/2010 12:36:34
#337865
PH1959...

Cara so meio leigo no assunto, mas vamos lá...

Vou tentar executar o comando acima...

Faço esse select [Ô]gigante[Ô] para gerar um relatótio no data Report... com essa função também consigo? Utilizo o listapostos(ij) como meu recordset(axo que é isso)...

att,

Tópico encerrado , respostas não são mais permitidas