Ir para conteúdo

POWERED BY:

Arquivado

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

Renan Setrini

[Resolvido] Consulta SQL Imensa como fazer?

Recommended Posts

Olá pessoal. Sou novo no fórum muito prazer a todos me chamo Renan Setrini.

Tenho 2 dúvidas referente a TIMEOUT e como montar um Do While, Loop...

Gostaria de saber como proceder com uma grande instrução SQL. No Query analyser do SQL ela demora 45 segundos para concluir, quando jogo essa consulta no ASP dá tempo excedido. O que devo fazer para solucionar este problema?

 

 

Outra dúvida é como colocar o Do While e o rs.movenext Loop

 

Minha consulta aparece deste jeito.

Ex:

 

Cliente - Código do Produto - Quantidade (Campos)

Sr João - Maçaneta - 10

Sr João - Roseta - 15

Sr João - Espelho - 20

Sr. José - Maçaneta - 15

Sr. José - Espelho - 2 (dados)

 

Quero mostrar para o usuário final desta maneira

 

Sr João

Código do Produto - Quantidade

Maçaneta - 10

Roseta - 15

Espelho - 20

 

Sr. José

Código do Produto - Quantidade

Maçaneta - 15

Espelho - 2

 

assim por diante.

 

 

Como montar do do while, loop etc.?

 

 

 

Muito Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eita pooooorrrr................ o.O ????

 

SQL grande da bexiga !!!!

 

Cara.. para ver se a instrução está OK.. da um "Response.Write" nela antes de mandar executa-la.... ai você ve se ela está de acordo com oq você qr e se não contem erros..

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

com um sql desse tamanho melhor stored procedure!!

 

Na verdade a consulta roda em 45 segundos aproximadamente meu problema é com TimeOut como eu resolvo este problema?

E se você puder me explicar como trabalhar com o Loop conforme escrevi no inicio do tópico ficaria agradecido

 

Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você já enxugou seu sql recomendo fazer o que o tedk' disse e se não resolver você vai ter que modificar o time out no IIS.

Seria possivel postar a query?

Compartilhar este post


Link para o post
Compartilhar em outros sites

(SELECT IT.COD_PED, IT.COD_PROD, IT.QTD, P.DT_ENTRADA, C.FANTASIA, ' ' AS REPROVADO, ' ' AS CONSTRUTORA FROM ITENS_ROMANEIO_CONSOLIDADO AS IT

INNER JOIN PED_SAIDA AS P ON IT.COD_PED = P.COD_PED 
INNER JOIN CLIENTES AS C ON P.COD_EMP = C.COD_EMP
INNER JOIN ROT_PED_REL AS ROT ON IT.COD_PED = ROT.COD_PED 
INNER JOIN PRODUTOS AS PROD ON IT.COD_ID_PROD = PROD.COD_ID_PROD
INNER JOIN ITENS_SAIDA AS ITS ON IT.COD_PED = ITS.COD_PED 

WHERE (ROT.COD_ROT = 13) AND (ROT.FIM >= CONVERT(DATETIME, '2008-01-30 00:00:00', 102)) AND (ROT.FIM <= CONVERT(DATETIME, '2008-01-30 23:59:59', 102)) AND IT.COD_PED NOT IN (SELECT COD_PED FROM ROT_PED_REL WHERE APROVADO = 2 AND COD_ROT IN (SELECT COD_ROT FROM ROTINAS_SAIDA WHERE ORDEM_ROT > 1)) AND P.COD_EMP NOT IN (SELECT COD_EMP FROM clientes_seg_rel where cod_seg_cli = 18) AND ((PROD.COD_GR_VENDA IN ('25.70','11.10','11.20','17','23') AND ITS.COD_STAT_ITEM IN (2,3,7) AND NOT IT.COD_ID_PROD IN (86,457,7893,7894,7895,440,7896,2051,14136,2699,13836,1237,297,298,300,301,302,4
04,408,338,418,420,422,345,425,432,347,17766,18096,18621,19781,21476,23215,429,2
5
430,22985,23219,25406,22700,22701,22979,22724,22651,17816,23388,27043,24933,2704
4
,26744,25409) AND NOT ((IT.COD_PROD LIKE 'MA510-Z%' OR IT.COD_PROD LIKE 'MA517-Z%' OR IT.COD_PROD LIKE 'MA518-Z%' OR IT.COD_PROD LIKE 'MA519-Z%' OR IT.COD_PROD LIKE 'MA537-Z%' OR IT.COD_PROD LIKE 'MA538-Z%' OR IT.COD_PROD LIKE 'MA525-Z%' OR IT.COD_PROD LIKE 'MA526-Z%' OR IT.COD_PROD LIKE '609-1%') AND NOT (IT.COD_PROD LIKE 'MA510-ZNA' OR IT.COD_PROD LIKE 'MA517-ZNA' OR IT.COD_PROD LIKE 'MA518-ZNA' OR IT.COD_PROD LIKE 'MA534-ZCE' OR IT.COD_PROD LIKE 'MA510-ZEA') AND IT.QTD < 25) AND NOT ((IT.COD_PROD LIKE 'MA529-AEE' OR IT.COD_PROD LIKE 'MA549%' OR IT.COD_PROD LIKE 'MA535-ZC' OR IT.COD_PROD LIKE 'MA535-ZCE' OR IT.COD_PROD LIKE 'MA535-ZBT' OR IT.COD_PROD LIKE 'MA527-ZC%' OR IT.COD_PROD LIKE 'MA527-ZBT') AND IT.QTD < 50) AND NOT (IT.COD_PROD LIKE '1284%' OR IT.COD_PROD LIKE '608%' OR IT.COD_PROD LIKE 'MA568%') AND IT.QTD > 0) OR (PROD.COD_GR_VENDA IN ('25.60') AND ITS.COD_PED IN (2,3,7) AND IT.COD_PROD LIKE 'ES%265%' OR IT.COD_PROD LIKE 'ESP263%' OR IT.COD_PROD LIKE 'ES264%')) AND P.COD_ID_CFO IN (SELECT COD_ID_CFO FROM CFO WHERE DEVOLUCAO <> 1 AND COD_CFO <> '5949' AND COD_CFO <> '6949')

GROUP BY IT.COD_PED, IT.COD_PROD, IT.QTD, P.DT_ENTRADA, C.FANTASIA)


		UNION 


(SELECT IT.COD_PED, IT.COD_PROD, IT.QTD, P.DT_ENTRADA, C.FANTASIA, '*' AS REPROVADO, 'C' AS CONSTRUTORA FROM ITENS_ROMANEIO_CONSOLIDADO AS IT 

INNER JOIN PED_SAIDA AS P ON IT.COD_PED = P.COD_PED 
INNER JOIN CLIENTES AS C ON P.COD_EMP = C.COD_EMP 
INNER JOIN ROT_PED_REL AS ROT ON IT.COD_PED = ROT.COD_PED 
INNER JOIN PRODUTOS AS PROD ON IT.COD_ID_PROD = PROD.COD_ID_PROD 
INNER JOIN ITENS_SAIDA AS ITS ON IT.COD_PED = ITS.COD_PED

WHERE (ROT.COD_ROT = 13) AND (ROT.FIM >= CONVERT(DATETIME, '2008-01-30 00:00:00', 102)) AND (ROT.FIM <= CONVERT(DATETIME, '2008-01-30 23:59:59', 102)) AND IT.COD_PED IN (SELECT COD_PED FROM ROT_PED_REL WHERE APROVADO = 2 AND COD_ROT IN (SELECT COD_ROT FROM ROTINAS_SAIDA WHERE ORDEM_ROT > 1)) AND P.COD_EMP IN (SELECT COD_EMP FROM clientes_seg_rel where cod_seg_cli = 18) AND ((PROD.COD_GR_VENDA IN ('25.70','11.10','11.20','17','23') AND ITS.COD_STAT_ITEM IN (2,3,7) AND NOT IT.COD_ID_PROD IN (86,457,7893,7894,7895,440,7896,2051,14136,2699,13836,1237,297,298,300,301,302,4
04,408,338,418,420,422,345,425,432,347,17766,18096,18621,19781,21476,23215,429,2
5
430,22985,23219,25406,22700,22701,22979,22724,22651,17816,23388,27043,24933,2704
4
,26744,25409) AND NOT ((IT.COD_PROD LIKE 'MA510-Z%' OR IT.COD_PROD LIKE 'MA517-Z%' OR IT.COD_PROD LIKE 'MA518-Z%' OR IT.COD_PROD LIKE 'MA519-Z%' OR IT.COD_PROD LIKE 'MA537-Z%' OR IT.COD_PROD LIKE 'MA538-Z%' OR IT.COD_PROD LIKE 'MA525-Z%' OR IT.COD_PROD LIKE 'MA526-Z%' OR IT.COD_PROD LIKE '609-1%') AND NOT (IT.COD_PROD LIKE 'MA510-ZNA' OR IT.COD_PROD LIKE 'MA517-ZNA' OR IT.COD_PROD LIKE 'MA518-ZNA' OR IT.COD_PROD LIKE 'MA534-ZCE' OR IT.COD_PROD LIKE 'MA510-ZEA') AND IT.QTD < 25) AND NOT ((IT.COD_PROD LIKE 'MA529-AEE' OR IT.COD_PROD LIKE 'MA549%' OR IT.COD_PROD LIKE 'MA535-ZC' OR IT.COD_PROD LIKE 'MA535-ZCE' OR IT.COD_PROD LIKE 'MA535-ZBT' OR IT.COD_PROD LIKE 'MA527-ZC%' OR IT.COD_PROD LIKE 'MA527-ZBT') AND IT.QTD < 50) AND NOT (IT.COD_PROD LIKE '1284%' OR IT.COD_PROD LIKE '608%' OR IT.COD_PROD LIKE 'MA568%') AND IT.QTD > 0) OR (PROD.COD_GR_VENDA IN ('25.60') AND ITS.COD_PED IN (2,3,7) AND IT.COD_PROD LIKE 'ES%265%' OR IT.COD_PROD LIKE 'ESP263%' OR IT.COD_PROD LIKE 'ES264%')) AND P.COD_ID_CFO IN (SELECT COD_ID_CFO FROM CFO WHERE DEVOLUCAO <> 1 AND COD_CFO <> '5949' AND COD_CFO <> '6949')

GROUP BY IT.COD_PED, IT.COD_PROD, IT.QTD, P.DT_ENTRADA, C.FANTASIA)


		ORDER BY IT.COD_PED ASC

 

 

 

 

 

Da erro de TimeOut.

 

 

Gostaria de saber também como montar o Loop conforme postei acima.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom .... o seu problema primeiro é a customização do select, o pessoal do banco de dados pode te dar uma ajuda. (SQL SERVER, ACCESS ou MySql)

 

Creio que uns dos problemas na demora é o LIKE '%%', o banco faz uma busca em campo string, que é muito mais demorado que um autonumerador chave primaria por exemplo.

 

Mas pelo que pude ver, a sua necessidade é trazer a quantidade de produtos pra cada cliente, não é mesmo ?

 

Se essas quantidade já estão gravadas nas tabelas então um select simples pode resover... se nao tiver... usando o SUM você tem o resultado.

 

Lembre-se de nao publicar no servidor uma consulta grande sem que antes esteja customizada o maximo possível, com isso você evita a demora na execução de outras aplicação que estao trabalhando paralelamente a sua.

 

Att..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo bem, sobre a consulta vou postar no tópico de SQL para melhor customá-la.

 

Sobre a momenclatura o que eu preciso é o seguinte.

No banco já esta somando as quantidades. Meu select traz o código do pedido, o cliente, produto e quantidade tudo um embaixo do outro.

 

Preciso montar o layout desta maneira:

 

Sr. João - 94555

Aí embaixo mostrar o código do produto e quantidade onde tenha o Pedido acima entendeu?

Código do Produto - Quantidade

Maçaneta - 10

Roseta - 20

 

O que ocorre é que como existem pedidos com nº iguais, se eu fizer o Loop ele vai abrir outra coluna com o mesmo nº de pedido logo abaixo. E isto eu não quero.

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei num exemplo mais claro para ver se vocês consiguem descobrir o que eu preciso:

 

Imaginem este select

 

Pedido - Produto

94555 - maçaneta

94555 - roseta

94555 - alicate

94556 - maçaneta

94556 - ferro

94557 - ferro

94558 - alicate

 

 

 

Aí quero fazer um Loop organizando por Pedido

Pedido : 94555

Macaneta

Roseta

Alicate

 

Pedido : 94556

maçaneta

Ferro

 

 

 

Desta maneira que eu preciso. Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só vou te dizer uma coisa:

 

While dentro de While...

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Set rs = Conn.Execute(Select Pedido from Tbl_Ped)

While not rs.eof

Response.Write("Pedido nº: " & Rs("Pedido") & "<br>")
Set rs1 = Conn.Execute(Select Produto from tbl_prod where pedido = '" & rs("pedido") & "')

if not rs1.eof then
while not rs1.eof
response.write("Produto: " & rs1("Produto") & "<br>")
rs1.movenext
wend
end if
rs.movenext
wend

 

Por hoje é só... não passo mais nada de mão beijada até amanhã...

 

Fui

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso como o dark fez...

 

quando você quizer montar um loop dentro do outro você deverá fazer recordsets com nomes diferentes!!

 

como o Dark fez, rs e rs1 para não influênciar na hora do resultado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeitamente o código foi útil porém acho que não consegui me expressão de uma maneira clara. Vou tentar denovo exemplificando.

 

Com o código que o Darkdemo me mostrou, meu navegador retornou dessa maneira..

 

Pedido: 94152 Cliente: MACRO EMPREENDIMENTOS IMOBILIÁRIOS

Qtd: 74

Produto: 604-LC

Data Entrada: 29/01/2008

 

Pedido: 94152 Cliente: MACRO EMPREENDIMENTOS

Qtd: 70

Produto: MA519-ZC

Data Entrada: 29/01/2008

 

Pedido: 94154 Cliente: GUARAMOIMIS EMPREEND

Qtd: 210

Produto: MA510-LC

Data Entrada: 29/01/2008

 

Pedido: 94157 Cliente: GUARAMOIMIS EMPREEND I

Qtd: 16

Produto: MA510-LC

Data Entrada: 29/01/2008

 

 

Observem que o mesmo nº de pedido 94152 trouxe produto e quantidade diferente.

O que eu preciso fazer, se for possivel, é agrupar por código de pedido, desta maneira

 

Pedido 94152 Cliente MACRO EMPREENDIMENTOS

aí sim ele mostra abaixo as quantidades e produtos referente a ESTE PEDIDO.

 

Qtd: 74

Produto: 604-LC

Data Entrada: 29/01/2008

 

Qtd: 70

Produto: MA519-ZC

Data Entrada: 29/01/2008

 

aí passa para o próximo pedido, assim sucessivamente.

 

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste como você fez os Whiles...

 

No exemplo que te passei, é para funcionar perfeitamente do jeito que você precisa....

 

Poste o código...

 

Abraços..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas era oq ??

 

você usou a logica q te passei no exemplo ou resolveu de outra forma ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

parabens

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.