Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
Senhores.
Eu sou estudante e tenho pouco conhecimento com sql. Onde trabalho utilizo o sql para montar alguns relatórios.
Preciso fazer um relatório onde eu tenha as seguinte informações;
Nome,
codigo,
e ultima data de venda de cada ponto de venda.
SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) As UltimaVenda
FROM CON002 GROUP BY CD_Ponto_Venda
Porém, da erro.
Msg 8120, Level 16, State 1, Line 1
Column 'CONBI002.NM_Pessoa' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Alguém pode me ajudar?!
Grato.
Boa noite,
Motta.
Quando agrupo desta forma eu repito varias vezes os pontos de vendas, porque tenho varias pessoas que são de determinado ponto de venda.
Meu objetivo com a consulta e saber qual foi a ultima venda cadastrado de um determinado ponto independente da pessoa que o vendeu.
De qualquer forma eu sou grato pela ajuda.
Mas existe mais de um CD_PONTO_VENDA ?
Não é chave única ?
Pode colocar a sintaxe juntamente com o join?
Att.
Boa noite,
Senhores.
Sim existe mais de um ponto de venda.
O cenário atual é o seguinte;
Existe vários pontos de vendas, porém, dentro de cada ponto de venda existe varias pessoas que efetuam vendas. No entanto, só é necessário trazer somente a ultima data registrada de cada ponto de venda, independente da pessoal que o fez.
Quando efetuo a consulta abaixo ele me retorna exatamente o que eu preciso, com exceção do nome da pessoa que está vinculado ao ponto de venda.
SELECT CD_PONTO_VENDA, MAX(DT_VENDA) As UltimaVenda
FROM CON002 GROUP BY CD_Ponto_Venda
Me retorna cerca de 500 registro.
Quando utilizo o que você me orientou esse número aumente expressivamente.
SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) As UltimaVenda
FROM CON002
GROUP BY nm_ponto_venda , CD_Ponto_Venda
Acho que terei que encontrar uma forma de puxar esses dados sem o group by.
Grato pela atenção.
Precisava que me retornasse as informações desse sql abaixo;
SELECT
A.NM_Pessoa,
A.CD_Ponto_Venda,
MAX(A.DT_VENDA) As UltimaVenda
FROM CON002 A
GROUP BY A.CD_Ponto_Venda
Mas como existe um agrupamento ele da erro.
Msg 8120, Level 16, State 1, Line 1
Column 'CONBI002.NM_Pessoa' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
tente assim
--max
SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA)
FROM CON002
GROUP BY nm_ponto_venda , CD_Ponto_Venda
--estes "caras"
SELECT A.NM_Pessoa,
A.CD_Ponto_Venda,
A.DT_VENDA As UltimaVenda
FROM CON002 A
WHERE (NM_PONTO_VENDA, CD_PONTO_VENDA, DT_VENDA)
IN (SELECT NM_PONTO_VENDA,
CD_PONTO_VENDA,
MAX(DT_VENDA)
FROM CON002
GROUP BY nm_ponto_venda , CD_Ponto_Venda)/applications/core/interface/imageproxy/imageproxy.php?img=http://imageshack.us/a/img198/6959/d8sb.jpg&key=adffe7d51a41a43a3293de010add325a4d048e3704147c221d5ac65e7965cafe" alt="d8sb.jpg" />Ta
Ta apresentando a seguinte mensagem.
Msg 4145, Level 15, State 1, Line 5
An expression of non-boolean type specified in a context where a condition is expected, near ','.
Tentei substituir por and no lugar da virgula, mas, sem sucesso.
Não é IN, é EXISTS
Olhando direito a sintaxe do post #1,
SELECT NM_PONTO_VENDA , CD_PONTO_VENDA , MAX(DT_VENDA) As UltimaVendaFROM CON002GROUP BY NM_PONTO_VENDA, CD_Ponto_Venda
O resultado já não seria a última venda por NM_PONTO_VENDA???
Qual o resultado que esta aparecendo e o resultado esperado?
Att.
No #7 é uma síntaxe que funciona no Oracle, não sei se roda de fato no SqlServer
select *
from tabela
where (campo1,campo2) in (select campo1,campo2
from tabela
where ...)Motta,
neste caso tem que fazer um join entre as consultas:
select * from
(select * from tabela) a
inner join (select * from tabela) b
on a.xxx=b.xxx
where (condicao...)
Por isso perguntei o resultado esperado, pois deste modo, pode-se fazer o join acima ou até mesmo uma CTE.
Boa noite,
Senhores.
No caso Sr.A.Jr, o que estou tentando extrair está na mesma tabela, neste caso tem que fazer relacionamento com ela mesma!?
Conforme falei no poste anteior #6, está consulta me retorna exatamente o que preciso: Código do ponto de venda e data da ultima venda cadastrada no ponto, como foi agrupado pelo cd_ponto_venda, eu não consigo trazer mais uma informação que é muito importante para o relatório... o nome da pessoa.
SELECT CD_PONTO_VENDA, MAX(DT_VENDA) As UltimaVenda
FROM CON002 GROUP BY CD_Ponto_VendaSou contra, mas um subselect resolveria, desde que não tenha mais de um NM_Pessoa para CD_PONTO_VENDA
SELECT a.CD_PONTO_VENDA, MAX(a.DT_VENDA) As UltimaVenda, (SELECT b.NM_Pessoa from CON002 b where b.CD_PONTO_VENDA = a.CD_PONTO_VENDA) FROM CON002 aGROUP BY a.CD_Ponto_Venda
[]´s
ah, e antes de mais nada, Sr não né :p
Bom dia.
Não deu certo.
Apresenta a seguinte mensagem.
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Nesta tabela existe sim mais de um nome de pessoa para um ponto de venda.
Como eu informei no post eu estou aprendendo sql, agora estou buscando curso.. conteúdo para estudo.
Se vocês souberem que algum por favar me passem.
Neste momento estou fazendo o da Soft Blue.
Grato.
SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, ,DT_VENDA ,NM_PESSOA
FROM CON002 ,
(SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) AS ULTIMAVENDA
FROM CON002
GROUP BY CD_PONTO_VENDA) CON002MAX
WHERE CON002.CD_PONTO_VENDA = CON002MAX.CD_PONTO_VENDAA.Jr
Sou contra, mas um subselect resolveria, desde que não tenha mais de um NM_Pessoa para CD_PONTO_VENDA
Tente a query do #7 concatenando
SELECT A.NM_Pessoa,
A.CD_Ponto_Venda,
A.DT_VENDA As UltimaVenda
from CON002 a
WHERE NM_PONTO_VENDA+CD_PONTO_VENDA+DT_VENDA
IN (SELECT NM_PONTO_VENDA+CD_PONTO_VENDA+MAX(DT_VENDA)
from CON002
GROUP BY nm_ponto_venda , CD_Ponto_Venda)
Coloquei o mais "+" mas não sei se é assim que concatena
Observação, esta query pode demorar
@Motta,
o "+" concatena sim, campos textos. Se um deles for =! de texto vai dar erro.
@tanaka_
Como que se associa um NM_PONTO_VENDA a um CD_PONTO_VENDA ou o relacionamento é 1 >º N ?
SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, ,DT_VENDA ,NM_PESSOA
FROM CON002 ,
(SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) AS ULTIMAVENDA
FROM CON002
GROUP BY CD_PONTO_VENDA) CON002MAX
WHERE SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) AS DT_VENDASELECT NM_PONTO_VENDA, CD_PONTO_VENDA, ,DT_VENDA ,NM_PESSOA
FROM CON002 ,
(SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) AS ULTIMAVENDA
FROM CON002
GROUP BY CD_PONTO_VENDA) CON002MAX
WHERE CON002.CD_PONTO_VENDA = CON002MAX.CD_PONTO_VENDA>
@Motta,
o "+" concatena sim, campos textos. Se um deles for =! de texto vai dar erro.
@tanaka_
Como que se associa um NM_PONTO_VENDA a um CD_PONTO_VENDA ou o relacionamento é 1 >º N ?
Sim 1 para muitos.
Essa tabela é uma espécie de concentrador do BI. Como está contido toda a informação que preciso nela não estou utilizando a tabela de pessoa, onde eu posso dar um inner join associando pelo id_cota
SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, ,DT_VENDA ,NM_PESSOA
FROM CON002 , (SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) AS ULTIMAVENDA
FROM CON002
GROUP BY CD_PONTO_VENDA) CON002MAX
WHERE CON002.CD_PONTO_VENDA = CON002MAX.CD_PONTO_VENDA
AND CON002.NM_PONTO_VENDA = CON002MAX.NM_PONTO_VENDA
AND CON002.DT_VENDA = CON002MAX.DT_VENDA
SELECT NM_PONTO_VENDA, CD_PONTO_VENDA, MAX(DT_VENDA) As UltimaVenda
FROM CON002
GROUP BY nm_ponto_venda , CD_Ponto_Venda
Tente isto