Ir para conteúdo

POWERED BY:

Arquivado

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

shumi

SQL complexo

Recommended Posts

Galera,Precisaria fazer esse SQL abaixo, mas ainda não entendi direito como funciona esses SQLs complexos eu só entendi os + simples, por favor me ajudem nesse que entendendo esse será + facil fazer os outros, pois saberei os caminhos!!!!

Selecionar o nome do vendedor na tabela pontuacao_vendedor, depois ir na tabela cad_vendedores e ver quem é o supervisor dele, depois ir na tabela pontuacao_supervisor e contar quantas linhas 200 tem.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi oq significa "contar quantas linhas 200 tem."As tabelas pontuacao_vendedor e cad_vendedores tem relacionamentos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi oq significa "contar quantas linhas 200 tem."

desculpa expliquei mal!Contar quantas nº 200(que seria a pontuação do produto meta da campanha)tem pra cada supervisor.

As tabelas pontuacao_vendedor e cad_vendedores tem relacionamentos ?

Tem sim!Primeiro o user tem que cadastrar o vendedor para depois colocar a pontuação dele, quanto o user insere a pontuação do vendedor automaticamente insere a pontuação pro supervisor dele, por isso que o SQL que expliquei ele redimenciona para o supervisor, pois seria + fácil a contagem!Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi direito, mas tenta isso :

select count(nome_supervisor) from pontuacao_supervisor where nome_supervisor = (select nome_supervisor from cad_vendedores where nome_vendedor = '"& request("nome_vendedor") &"') and pontuacao = 200

Aí eu to mandando puxar a conta de quantos registros há na tabela pontuacao_supervisor (com o nome vindo da tabela cad_vendedores do respectivo vendedor) e (pontuacao do supervisor = 200)pode estar errado, experimenta e vamos ver o erro =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi direito, mas tenta isso :

select count(nome_supervisor) from pontuacao_supervisor where nome_supervisor = (select nome_supervisor from cad_vendedores where nome_vendedor = '"& request("nome_vendedor") &"') and pontuacao = 200

Aí eu to mandando puxar a conta de quantos registros há na tabela pontuacao_supervisor (com o nome vindo da tabela cad_vendedores do respectivo vendedor) e (pontuacao do supervisor = 200)pode estar errado, experimenta e vamos ver o erro =)

deu erro na linha 75ADODB.Recordset erro '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal. /incentivos_lg/pontos_vendedores.asp, line 75 meu arquivo esta assim:
<%dim Conexcao,sql,sql2,sql3,sql4,sql5,sql6,rs,rs2,rs3,rs4,rs5,rs6,varcodIf NOT (Session("logado")) ThenResponse.Redirect "index.asp"Response.EndEnd Ifset Conexcao = Server.CreateObject("ADODB.Connection")Conexcao.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MaPpath("db_lg.mdb")Conexcao.open						Sql = "SELECT First(nome) AS nomeagrupado, SUM(ponto) AS pontos FROM pontuacao_vendedor GROUP BY nome ORDER BY Sum(PONTO) DESC;"			Set rs=Conexcao.Execute(sql)						Lojas_7 = "& #34;,004,156,217,319,330,423,408,332,290,401,406,002,200,037,058,066,071,085,125,076,119,128,157,321," %><html><head><title>LG - Incentivo de Vendas</title>  <style type="text/css"><!--body {	background-color: #EE9127;	}	.texto10 {	font-family: Arial, Helvetica, sans-serif;	font-size: 10px;	color: #464646;		}		.texto11 {	font-family: Arial, Helvetica, sans-serif;	font-size: 15px;	color: #464646;	}-->  </style></head><body><TABLE height="100%" width="100%" border="0">			<TR>			<TD height="45" align="center" valign="middle"><center>			  <p><img src="pontuacao_vendedores.jpg"></p>			  </center>			<td></tr><tr><td>		 <center>		   <span class="texto10">		   </span>		 		 </center>	 <center>	   <table width="200" border="1">		 <tr>		   <td width="61"><span class="style2">Vendedor</span></td>		   <td width="42"><span class="style2">Pontos</span></td>		   <td width="40"><span class="style2">Split</span></td>		   <td width="29">Loja</td>		 </tr>		 <tr>		   <td><span class="texto10">			 <%While not rs.EOF%>			 <%=rs("nomeagrupado")%> </span></td>		   <td><span class="texto10"><%=rs("pontos")%></span></td>		   <td><%		   Sql1 = "select count(nome) from pontuacao_supervisor where nome = (select supervisor from cad_vendedores where nome = '"& request("nome") &"') and ponto = 200"		   Set rs1=Conexcao.Execute(sql1)						SQL2 = "Select Cod_Loja From cad_vendedores Where Nome = '"& RS("NomeAgrupado") &"';"			Set RS2 = Conexcao.Execute(SQL2)			Cor_Fonte = "RED"			  [color=#FF0000]If InStr(Lojas_7,","& rs2("cod_loja") &",")<>0 AND RS1("Ponto") > 6 Then[/color]			Cor_Fonte = "BLACK"			End If %>			<font color="<%=Cor_Fonte%>"><%=RS1("Ponto")%></font></td>		   <td><span class="texto10"><%=RS2("cod_loja")%></span></td>		 </tr>		 <tr>		   <td><span class="texto10">			 <%			RS2.Close			Set RS2 = Nothing			RS1.Close			Set RS1 = Nothing	 rs.MoveNext	 wend	 set rs=nothing%>		   </span></td>		   		 </tr>	   </table>		  </center>	  </td></tr><tr>  <td><!-- URL's used in the movie--><A HREF=home.asp></A> <!-- text used in the movie--><center><OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="50" HEIGHT="50" id="voltar" ALIGN="center"> <PARAM NAME=movie VALUE="voltar.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="voltar.swf" quality=high bgcolor=#FFFFFF  WIDTH="50" HEIGHT="50" NAME="voltar" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT></center></td></tr></table>  </body></html>
Obrigado!!!

Não sei se entendi direito, mas tenta isso :

select count(nome_supervisor) from pontuacao_supervisor where nome_supervisor = (select nome_supervisor from cad_vendedores where nome_vendedor = '"& request("nome_vendedor") &"') and pontuacao = 200

Aí eu to mandando puxar a conta de quantos registros há na tabela pontuacao_supervisor (com o nome vindo da tabela cad_vendedores do respectivo vendedor) e (pontuacao do supervisor = 200)pode estar errado, experimenta e vamos ver o erro =)

deu erro na linha 75ADODB.Recordset erro '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal. /incentivos_lg/pontos_vendedores.asp, line 75 meu arquivo esta assim:
<%dim Conexcao,sql,sql2,sql3,sql4,sql5,sql6,rs,rs2,rs3,rs4,rs5,rs6,varcodIf NOT (Session("logado")) ThenResponse.Redirect "index.asp"Response.EndEnd Ifset Conexcao = Server.CreateObject("ADODB.Connection")Conexcao.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MaPpath("db_lg.mdb")Conexcao.open						Sql = "SELECT First(nome) AS nomeagrupado, SUM(ponto) AS pontos FROM pontuacao_vendedor GROUP BY nome ORDER BY Sum(PONTO) DESC;"			Set rs=Conexcao.Execute(sql)						Lojas_7 = "& #34;,004,156,217,319,330,423,408,332,290,401,406,002,200,037,058,066,071,085,125,076,119,128,157,321," %><html><head><title>LG - Incentivo de Vendas</title>  <style type="text/css"><!--body {	background-color: #EE9127;	}	.texto10 {	font-family: Arial, Helvetica, sans-serif;	font-size: 10px;	color: #464646;		}		.texto11 {	font-family: Arial, Helvetica, sans-serif;	font-size: 15px;	color: #464646;	}-->  </style></head><body><TABLE height="100%" width="100%" border="0">			<TR>			<TD height="45" align="center" valign="middle"><center>			  <p><img src="pontuacao_vendedores.jpg"></p>			  </center>			<td></tr><tr><td>		 <center>		   <span class="texto10">		   </span>		 		 </center>	 <center>	   <table width="200" border="1">		 <tr>		   <td width="61"><span class="style2">Vendedor</span></td>		   <td width="42"><span class="style2">Pontos</span></td>		   <td width="40"><span class="style2">Split</span></td>		   <td width="29">Loja</td>		 </tr>		 <tr>		   <td><span class="texto10">			 <%While not rs.EOF%>			 <%=rs("nomeagrupado")%> </span></td>		   <td><span class="texto10"><%=rs("pontos")%></span></td>		   <td><%		   Sql1 = "select count(nome) from pontuacao_supervisor where nome = (select supervisor from cad_vendedores where nome = '"& request("nome") &"') and ponto = 200"		   Set rs1=Conexcao.Execute(sql1)						SQL2 = "Select Cod_Loja From cad_vendedores Where Nome = '"& RS("NomeAgrupado") &"';"			Set RS2 = Conexcao.Execute(SQL2)			Cor_Fonte = "RED"			' linha do ERRO a baixo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!If InStr(Lojas_7,","& rs2("cod_loja") &",")<>0 AND RS1("Ponto") > 6 Then			Cor_Fonte = "BLACK"			End If %>			<font color="<%=Cor_Fonte%>"><%=RS1("Ponto")%></font></td>		   <td><span class="texto10"><%=RS2("cod_loja")%></span></td>		 </tr>		 <tr>		   <td><span class="texto10">			 <%			RS2.Close			Set RS2 = Nothing			RS1.Close			Set RS1 = Nothing	 rs.MoveNext	 wend	 set rs=nothing%>		   </span></td>		   		 </tr>	   </table>		  </center>	  </td></tr><tr>  <td><!-- URL's used in the movie--><A HREF=home.asp></A> <!-- text used in the movie--><center><OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="50" HEIGHT="50" id="voltar" ALIGN="center"> <PARAM NAME=movie VALUE="voltar.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="voltar.swf" quality=high bgcolor=#FFFFFF  WIDTH="50" HEIGHT="50" NAME="voltar" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT></center></td></tr></table>  </body></html>
Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, esqueci de 1 detalhe:

 

select count(nome_supervisor) as pontuacao, nome_supervisor  from pontuacao_supervisor where nome_supervisor = (select nome_supervisor from cad_vendedores where nome_vendedor = '"& request("nome_vendedor") &"') and pontuacao = 200

 

 

1 observação: nessa linha :

[color=#FF0000]If InStr(Lojas_7,","& rs2("cod_loja") &",")<>0 AND RS1("Ponto") > 6 Then[/color]
você está mandando ele puxar do RS1 o campo "Ponto", mas no select ele não existe ......... e mesmo que existisse, a pontuação será sempre 200 pois está na condição do select

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está mandando ele puxar do RS1 o campo "Ponto", mas no select ele não existe ......... e mesmo que existisse, a pontuação será sempre 200 pois está na condição do select

Cara não tinha pensado nisso DESCULPA!!!Além dele puxar a pontuação 200, tb teria que somar os pontos de cada vendedor individual e os pontos deles estão na tabela pontuacao_vendedor!!!!Desculpa esqueci de colocar esse GRANDE detalhe!!!!!Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom aí a SQL muda um pouco:

select count(pontuacao_supervisor.nome_supervisor) as pontuacao_supervisor, (pontuacao_supervisor.nome_supervisor) as nome_supervisor, count(pontuacao_vendedor.nome_vendedor) as pontuacao_vendedor from pontuacao_supervisor inner join pontuacao_vendedor on pontuacao_supervisor.nome_supervisor = pontuacao_vendedor.nome_vendedor where nome_supervisor = (select nome_supervisor from cad_vendedores where nome_vendedor = '"& request("nome_vendedor") &"') and pontuacao = 200

argh fico uma coisa gigantesca.... se você estiver usando o SQL Server, abre o "Query Analizer" e testa essa SQL... fica difícil pra mim falar pra você a string correta sem poder testar aqui =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom aí a SQL muda um pouco:

select count(pontuacao_supervisor.nome_supervisor) as pontuacao_supervisor, (pontuacao_supervisor.nome_supervisor) as nome_supervisor, count(pontuacao_vendedor.nome_vendedor) as pontuacao_vendedor from pontuacao_supervisor inner join pontuacao_vendedor on pontuacao_supervisor.nome_supervisor = pontuacao_vendedor.nome_vendedor where nome_supervisor = (select nome_supervisor from cad_vendedores where nome_vendedor = '"& request("nome_vendedor") &"') and pontuacao = 200

argh fico uma coisa gigantesca.... se você estiver usando o SQL Server, abre o "Query Analizer" e testa essa SQL... fica difícil pra mim falar pra você a string correta sem poder testar aqui =/

Esta dando um erro de duplicidade de campos.No meu Banco de dados(Access) todas as tabelas de pontuação (pontuacao_vendedor, pontuacao_gerente, pontuacao_supervisor) tem os mesmos campos NOME e PONTO.o erro foi:Microsoft OLE DB Provider for ODBC Drivers erro '80004005' [Microsoft][Driver ODBC para Microsoft Access] O campo especificado 'nome' pode se referir a mais de uma tabela relacionada na cláusula FROM da instrução SQL. /incentivos_lg/pontos_vendedores.asp, line 70 e a SQL ficou assim:
Sql1 = "select count(pontuacao_supervisor.nome) as pontuacao_supervisor, (pontuacao_supervisor.nome) as nome, count(pontuacao_vendedor.nome) as pontuacao_vendedor from pontuacao_supervisor inner join pontuacao_vendedor on pontuacao_supervisor.nome = pontuacao_vendedor.nome where nome = (select nome from cad_vendedores where nome = '"& request("nome") &"') and ponto = 200"

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz esqueci 1 coisa:

 

where nome troca por where pontuacao_supervisor.nome

e

and ponto por and pontuacao_supervisor.ponto

 

Achei q você estivesse usando SQL Server..... não sei se o Inner Join funciona em Access... experimenta ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz esqueci 1 coisa:

 

where nome troca por where pontuacao_supervisor.nome

e

and ponto por and pontuacao_supervisor.ponto

 

Achei q você estivesse usando SQL Server..... não sei se o Inner Join funciona em Access... experimenta ae

Deu erro!!! http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

 

Microsoft OLE DB Provider for ODBC Drivers erro '80040e14'

 

[Microsoft][Driver ODBC para Microsoft Access] Você tentou executar uma consulta que não inclui a expressão 'nome' especificada como parte de uma função agregada.

 

/incentivos_lg/pontos_vendedores.asp, line 70

 

O SQL está assim:

 

Sql1 = "select count(pontuacao_supervisor.nome) as pontuacao_supervisor, (pontuacao_supervisor.nome) as nome, count(pontuacao_vendedor.nome) as pontuacao_vendedor from pontuacao_supervisor inner join pontuacao_vendedor on pontuacao_supervisor.nome = pontuacao_vendedor.nome where pontuacao_supervisor.nome=(select nome from cad_vendedores where nome = '"& request("nome") &"') and pontuacao_supervisor.ponto = 200"

 

Nossa cara olha o tamanho desse SQL!!! nunca que iria conseguir fazer sozinho!!!! :(

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem certeza q está substituindo os nomes dos campos certos ? ou no seu BD os nomes dos campos são esses mesmos ?A Sql tá gigante pq tamos fazendo testes no improviso... depois q conseguir fazer o treco funfar veremos se dá pra reduzir a stringps.: seu BD tem dados confidenciais ? já tem tabelas preenchidas ? você pode me mandar uma cópia, pra eu ver se consigo te passar a string simples e pronta ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem certeza q está substituindo os nomes dos campos certos ? ou no seu BD os nomes dos campos são esses mesmos ?A Sql tá gigante pq tamos fazendo testes no improviso... depois q conseguir fazer o treco funfar veremos se dá pra reduzir a stringps.: seu BD tem dados confidenciais ? já tem tabelas preenchidas ? você pode me mandar uma cópia, pra eu ver se consigo te passar a string simples e pronta ?

O DB não tem dados nenhum ainda, só testes!Posso lhe mandar? você faria essa gentileza?como lhe mando?abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode mandá por e-mail: games_mail@terra.com.brfica mais fácil pra resolver o problema

Ultra,lhe mandei o Banco me confirma se você recebeu, pois aqui na empresa alguns anexos são bloqueados!Muito obrigado! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
sql = "Select " &_            "pontuacao_supervisor.nome as nomesupervisor, "&_            "cad_vendedores.nome as nomevendedor, "&_            "pontuacao_supervisor.ponto as pontosupervisor "&_        "from cad_vendedores "&_            "inner join pontuacao_supervisor on cad_vendedores.supervisor = pontuacao_supervisor.nome "&_        "where cad_vendedores.nome = '"& request("nome") &"' and "&_            "pontuacao_supervisor.ponto = 200"

Tem 2 porém:1: ele vai puxar o nome do vendedor da tabela "cad_vendedores" e não do pontuacao_vendedor2: ele mostra todos os registros onde a pontuação do supervisor é 200, portanto cabe à você fazer via ASP a conta de quantas linhas 200 temTesta ae e vejamos se é oq você precisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

sql = "Select " &_            "pontuacao_supervisor.nome as nomesupervisor, "&_            "cad_vendedores.nome as nomevendedor, "&_            "pontuacao_supervisor.ponto as pontosupervisor "&_        "from cad_vendedores "&_            "inner join pontuacao_supervisor on cad_vendedores.supervisor = pontuacao_supervisor.nome "&_        "where cad_vendedores.nome = '"& request("nome") &"' and "&_            "pontuacao_supervisor.ponto = 200"

Tem 2 porém:1: ele vai puxar o nome do vendedor da tabela "cad_vendedores" e não do pontuacao_vendedor2: ele mostra todos os registros onde a pontuação do supervisor é 200, portanto cabe à você fazer via ASP a conta de quantas linhas 200 temTesta ae e vejamos se é oq você precisa

Ultra,Deu o erro:Microsoft OLE DB Provider for ODBC Drivers erro '80040e0c' Command text was not set for the command object. /incentivos_lg/pontos_vendedores.asp, line 76 Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu andei mexendo no código aqui e o erro mudou(não sei se pra melhor ou pior rss)

agora ele está assim:

 

ADODB.Recordset erro '800a0cc1'

 

Item cannot be found in the collection corresponding to the requested name or ordinal.

 

/incentivos_lg/pontos_vendedores.asp, line 75

 

 

e a linha 75 é

 

If InStr(Lojas_7,","& rs2("cod_loja") &",")<>0 AND RS1("Ponto") > 6 Then

ai se tiro a linha 75 da o mesmo erro, mas da aqui:

 

<%=RS1("Ponto")%></td>

Valeu!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu andei mexendo + e arrumei uma parte, fiz outro SQL 1 para contar os pontos do vendedor e o outro para contar os pontos 200 do supervisor de cada vendedor.Só que o que conta os pontos 200 do supervisor esta dando erro!!!eu fiz assim:

Sql1 ="select count(pontuacao_supervisor) as pontuacao,nome from pontuacao_supervisor where nome = (select nome from cad_vendedores where nome = '"& request("nome") &"') and pontuacao = 200"

que é o exemplo que você me deu acima!e esta dando o erro:Microsoft OLE DB Provider for ODBC Drivers erro '80040e14' [Microsoft][Driver ODBC para Microsoft Access] Você tentou executar uma consulta que não inclui a expressão 'nome' especificada como parte de uma função agregada. /incentivos_lg/pontos_vendedores.asp, line 71 O que fiz de errado???Obrigado

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.