Ir para conteúdo

Arquivado

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

Gilberto Jr

Erro Query Sql?

Recommended Posts

Boa tarde pessoal,

 

Com esse select eu faço vários cálculos. Só que tenho usado ele no MYSQL funciona perfeito.

MYSQL

select nome, ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*) from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) as ponto from times order by ponto desc

ACCESS, se eu deixar com o ORDER BY PONTO da erro

select nome, ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*) from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) as ponto from times

ACCESS, se eu deixar com o ORDER BY PONTO da erro

Microsoft OLE DB Provider for ODBC Drivers erro '80040e10'
[Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 1.

Mas se no ACCESS eu deixo order by nome funciona.

 

O que tem de errado nesse select?

 

Att;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua SQL para ver o que está sendo passado, se não é erro de sintaxe e verifique se não tem nenhum nome reservado em variáveis e veja também se os nomes de colunas especificados em uma instrução select não existe na tabela que está sendo consultada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

no Access, tente por os "alias" de campos calculados entre aspas simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei da o select roda porem não faz a ordenação.

 

Ficou assim

 

select 'nome', ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*) from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) as 'ponto' from times order by 'pontos' desc

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites
select 'nome',

 

não coloque aspas em nomes de colunas "normais", tabelas..

eu disse aspas em colunas calculadas (e pode ser só no "order by").

 

as 'ponto' from times order by 'pontos'

 

é "ponto" ou "pontos"? dá uma verificada nisso.

 

Qualquer coisa poste a estrutura da tabela, acho que ai da p/ ganhar tempo e evitar o "chutômetro".

Compartilhar este post


Link para o post
Compartilhar em outros sites

É ponto e não pontos. Tinha escrito errado.

 

ficou assim o meu código

select nome, ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*) from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) as ponto from times order by 'ponto' desc

Abaixo segue a estrutura das colunas.

times Id nome campeonato 1 corinthians 1 2 santos 2 3 sao paulo 1 4 palmeiras 2 5 botafogo 1 6 fluminense 2 campeonato Id nome 1 Brasileiro 2 Copra do Brasil jogos ID TIMEA TIMEB RESULTADOA RESULTADOB TEMPORADA CAMPEONATO 2 corinthians santos 2 1 2015 1 3 santos sao paulo 1 2 2015 2 12 sao paulo palmeiras 2 2 2015 1 13 corinthians palmeiras 3 1 2015 2 17 sao paulo santos 3 2 2015 1 18 botafogo fluminense 4 1 2015 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fez download do banco de dados pelo link http://www.tecnogalli.com.br/jogos.rar e faça o teste com o script

select nome, ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*) from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) as ponto from times order by ponto desc

 

Você vai ver que não esta funcionando.

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites
Você vai ver que não esta funcionando.

 

ah, sim; de fato essa query não funcionou aqui comigo inclusive no mysql (faltou por exemplo agrupar pelos nomes dos times, incluir a tabela "times" etc.). Mas como o foco do tópico é a ordenação, tente assim, ordenando pelo nº da coluna:

select nome, ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,
(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*)
from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*)
from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*)
from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) 
as ponto from jogos, times group by nome order by 3 desc;

aqui ok (Access 2010, MySQL 5.5).

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

ah, sim; de fato essa query não funcionou aqui comigo inclusive no mysql (faltou por exemplo agrupar pelos nomes dos times, incluir a tabela "times" etc.). Mas como o foco do tópico é a ordenação, tente assim, ordenando pelo nº da coluna:

select nome, ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,
(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*)
from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*)
from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*)
from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) 
as ponto from jogos, times group by nome order by 3 desc;

aqui ok (Access 2010, MySQL 5.5).

 

 

Olá Fernando, quando testo no SQL do access da certo, mas quando faço o selec no ASP não ordena.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui rodou normal

Compartilhar este post


Link para o post
Compartilhar em outros sites
quando testo no SQL do access da certo, mas quando faço o selec no ASP não ordena.

 

sugiro que poste o código, então, assim fica mais facil p/ o pessoal ajudar.

ressalvas: 1- o bd é o rar postado no #7; 2 - cerifique-se que está atualizando sua pg na hospedagem; 3- limpe o cache do navegador; 4 - teste em vários navegadores (o IE não é muito confiavel), pelo menos no firefox/crome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Pessoal, de fato era cache mesmo.

 

Consegui adaptar o select para minha conexão.

 

Só não estou conseguindo transformar esta rotina em select:

<td data-title="GP" class="numeric text-center">
<%
set qtdejogos1 = con.execute("select sum(resultadoa) as qtdejogos1 from JOGOS where timea='"&rs("nome")&"'")
set qtdejogos2 = con.execute("select sum(resultadob) as qtdejogos2 from JOGOS where timeb='"&rs("nome")&"'")
					
if isnull(qtdejogos1("qtdejogos1")) then
gol_1 = 0
else
gol_1 = qtdejogos1("qtdejogos1")
end if
if isnull(qtdejogos2("qtdejogos2")) then
gol_2 = 0
else
gol_2 = qtdejogos2("qtdejogos2")
end if
				
response.Write(gol_1+gol_2)
%>
</td>

<td data-title="GC" class="numeric text-center">
<%
set golcontra1 = con.execute("select sum(resultadob) as qtdejogos1 from JOGOS where timea='"&rs("nome")&"'")
set golcontra2 = con.execute("select sum(resultadoa) as qtdejogos2 from JOGOS where timeb='"&rs("nome")&"'")
					
if isnull(golcontra1("qtdejogos1")) then
gol_1c = 0
else
gol_1c = golcontra1("qtdejogos1")
end if
if isnull(golcontra2("qtdejogos2")) then
gol_2c = 0
else
gol_2c = golcontra2("qtdejogos2")
end if
						
golcontra = gol_1c+gol_2c
response.Write(golcontra)
%>
</td>

<td data-title="SG" class="numeric text-center">
<%
golpro = gol_1+gol_2
golcontra = gol_1c+gol_2c
response.Write(golpro-golcontra)
%>
</td>

Trata-se de gols pró, gols contra e saldo de gols

 

me ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi.. poste as mensagens de erro pq ta meio complicado de entender esse código.

você que desenvolveu?

 

bom, no caso do campeonato brasileiro 1 sql bem simples que você poderia tentar:

"select timea, sum(resultadoa) as gols_pro, sum(resultadob) as contra, 
(gols_pro-contra) as saldo from JOGOS group by timea"

(pesquise sobre "funções de agregação" - SQL).

 

qto a copa do brasil, sugiro entrar em contato com o autor do tópico, pois as regras são diferentes, ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernando,

 

Estou usando sua rotina do select para fazer as demais, até a parte de empates e derrotas eu consegui. só não estou conseguindo fazer 3 colunas uma para gols pró, gols contra e saldo de gols. estou fazendo assim:

 

rotina.jpg

 

 

No caso do gols_pro não esta dando certo, esta gerando o erro:

 

erro.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia;

 

Rodei o SQL direto no ACCESS funcionou. Rodei também na pagina ASP CLASSIC e também funcionou.

 

Veja como ficou o meu código.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conexaomysql.asp"-->
<%
call connect
%>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Cassificação</title>
</head>
 
<body>
<%
set rs = con.execute("select nome, ((select count(*) from JOGOS where timea=times.nome)+(select count(*) from JOGOS where timeb=times.nome)) as qtdejogo,(((select count(*) from JOGOS where timea=times.nome and resultadoa>resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa<resultadob))*3)+(((select count(*) from JOGOS where timea=times.nome and resultadoa=resultadob)+(select count(*) from JOGOS where timeb=times.nome and resultadoa=resultadob))*1) as ponto from jogos, times group by nome order by 3 desc")
%>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

<table border="1" style="width:500px; margin:auto;">

  <tr>
    <td align="center">TIMES</td>
    <td align="center">Quantidade de Jogos</td>
    <td align="center">Quantidade de Vitórias</td>
    <td align="center">Quantidade de derrotas</td>
    <td align="center">Quantidade de empates</td>
    <td align="center">Quantidade de Pontos</td>
    <td align="center">Gols Pro</td>
    <td align="center">Gols Contra</td>
    <td align="center">Saldo</td>
  </tr>
  <%
  while rs.eof = false
  %>
  <tr>
    <td align="center"><%=ucase(rs("nome"))%></td>
       <td align="center">
    <%
set qtdejogos1 = con.execute("select count(*) as qtdejogos1 from JOGOS where timea='"&rs("nome")&"'")
set qtdejogos2 = con.execute("select count(*) as qtdejogos2 from JOGOS where timeb='"&rs("nome")&"'")
response.Write(cint(qtdejogos1("qtdejogos1"))+cint(qtdejogos2("qtdejogos2")))
%>
    </td>
    <td align="center">
<%
set vitoia1 = con.execute("select count(*) as vitoia1 from jogos where ResultadoA>ResultadoB and timea='"&rs("nome")&"'")
set vitoia2 = con.execute("select count(*) as vitoia2 from jogos where ResultadoB>ResultadoA and timeb='"&rs("nome")&"'")
response.Write(cint(vitoia1("vitoia1"))+cint(vitoia2("vitoia2")))
%>
    </td>
    <td align="center">
    <%
set derrota1 = con.execute("select count(*) as derrota1 from jogos where ResultadoA<ResultadoB and timea='"&rs("nome")&"'")
set derrota2 = con.execute("select count(*) as derrota2 from jogos where ResultadoB<ResultadoA and timeb='"&rs("nome")&"'")
response.Write(cint(derrota1("derrota1"))+cint(derrota2("derrota2")))
%>    
    </td>
    <td align="center">
    <%
set empate1 = con.execute("select count(*) as empate1 from jogos where ResultadoA=ResultadoB and timea='"&rs("nome")&"'")
set empate2 = con.execute("select count(*) as empate2 from jogos where ResultadoB=ResultadoA and timeb='"&rs("nome")&"'")
response.Write(cint(empate1("empate1"))+cint(empate2("empate2")))
%>    
    </td>
    <td align="center"><%
set vitoia1 = con.execute("select count(*)*3 as vitoia1 from jogos where ResultadoA>ResultadoB and timea='"&rs("nome")&"'")
set vitoia2 = con.execute("select count(*)*3 as vitoia2 from jogos where ResultadoB>ResultadoA and timeb='"&rs("nome")&"'")
pontosvitoria = cint(vitoia1("vitoia1"))+cint(vitoia2("vitoia2"))

set empate1 = con.execute("select count(*)*1 as empate1 from jogos where ResultadoA=ResultadoB and timea='"&rs("nome")&"'")
set empate2 = con.execute("select count(*)*1 as empate2 from jogos where ResultadoB=ResultadoA and timeb='"&rs("nome")&"'")
pontosempate = cint(empate1("empate1"))+cint(empate2("empate2"))

response.Write(pontosvitoria+pontosempate)
%></td>
    <td align="center">
<%
set qtdejogos1 = con.execute("select sum(resultadoa) as qtdejogos1 from JOGOS where timea='"&rs("nome")&"'")
set qtdejogos2 = con.execute("select sum(resultadob) as qtdejogos2 from JOGOS where timeb='"&rs("nome")&"'")

if isnull(qtdejogos1("qtdejogos1")) then
gol_1 = 0
else
gol_1 = qtdejogos1("qtdejogos1")
end if
if isnull(qtdejogos2("qtdejogos2")) then
gol_2 = 0
else
gol_2 = qtdejogos2("qtdejogos2")
end if

response.Write(gol_1+gol_2)
%>
</td>
    <td align="center">
<%
set golcontra1 = con.execute("select sum(resultadob) as qtdejogos1 from JOGOS where timea='"&rs("nome")&"'")
set golcontra2 = con.execute("select sum(resultadoa) as qtdejogos2 from JOGOS where timeb='"&rs("nome")&"'")

if isnull(golcontra1("qtdejogos1")) then
gol_1c = 0
else
gol_1c = golcontra1("qtdejogos1")
end if
if isnull(golcontra2("qtdejogos2")) then
gol_2c = 0
else
gol_2c = golcontra2("qtdejogos2")
end if


golcontra = gol_1c+gol_2c

response.Write(golcontra)
%>    
</td>
    <td align="center">
<%
golpro = gol_1+gol_2
golcontra = gol_1c+gol_2c
response.Write(golpro-golcontra)
%>
    </td>
  </tr>
  <%
  rs.movenext
  wend
  %>
</table>
 
</body>
</html>
<%
call disconnect
%>

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Gil tudo bem?

 

Para mim funcionou da sua forma também, eu fiz uma modificação para ficar igual ao select do Fernando C. Voce deve se perguntar o porque disto. Bem, no select percebi que ao carregar a página ela é mais rápida e leve. Estou tentando otimizar

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.