Problemas com inner join

19/06/2007

0

Server: Msg 8120, Level 16, State 1, Line 17
Column ´DAUTOR.NOME´ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 17
Column ´DAUTOR.SOBRENOME´ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 17
Column ´DDOC.TITULO´ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
As mensagens acima acontecem sempre que rodo a seguinte query


SELECT COUNT(DMOV.DATA_EMP)AS ´QUANT. EMPREST.´, DAUTOR.NOME, DAUTOR.SOBRENOME, DDOC.TITULO
FROM ((DAUTOR INNER JOIN DDOCAUTO
ON DAUTOR.COD_AUTOR = DDOCAUTO.COD_AUTOR)
INNER JOIN DMOV
ON DDOCAUTO.COD_DOC = DMOV.COD_DOC)
INNER JOIN DDOC
ON DMOV.COD_DOC = DDOC.COD_DOC
where data_emp between ´2007-02-05 00:00:00.000´ and ´2007-06-19 14:00:00.000´
GROUP BY dmov.cod_doc


eu gostaria de montar esta query, e infelizmente, da o erro acima alguem sabe como resolver /???


desde já agradeço
abraços !!!


Bolomaster

Bolomaster

Responder

Posts

19/06/2007

Marcioabreu

SELECT COUNT(DMOV.DATA_EMP) AS [QUANT EMPREST], NOME, SOBRENOME, TITULO
FROM DAUTOR INNER JOIN DDOCAUTO ON DAUTOR.COD_AUTOR = DDOCAUTO.COD_AUTOR INNER JOIN DMOV ON DDOCAUTO.COD_DOC = DMOV.COD_DOC INNER JOIN DDOC ON DMOV.COD_DOC = DDOC.COD_DOC
where DateExpense between convert(datetime,´02/05/2007´,103) and convert(datetime,´19/06/2007´,103)
GROUP BY dmov.cod_doc, nome, sobrenome, titulo
ORDER
BY dmov.cod_doc
-xx-xxx--xxx-xx-

A menos que vc tenha campos com os memos nomes em diferentes tabelas, vc não precisa mencionar a tabela.campo no select statement. uma vez que vc esta incluindo a tabela no inner join o SQL vai ´preparar´ os dados do From antes de realizar o selecionar de select. outro detalhe é que vc não precisa de () no inner join. e se vc quiser colunas com dupla palavra vc usa [] como padrão... ex. ncomp as [nome completo]
um abraço e espero que tenha ajudado...


Responder

20/06/2007

Bolomaster

Deu certo kra valeu agora quero por exemplo nao repetir os titulos ai coloquei um DISTINCT e deu o seguinte erro....

Server: Msg 156, Level 15, State 1, Line 42
Incorrect syntax near the keyword ´DISTINCT´.

Segue abaixo a query

SELECT COUNT(DMOV.DATA_EMP) AS [QUANT EMPREST], (NOME + ´ ´ +SOBRENOME) AS [AUTOR], DISTINCT(TITULO)
FROM DAUTOR INNER JOIN DDOCAUTO ON DAUTOR.COD_AUTOR = DDOCAUTO.COD_AUTOR INNER JOIN DMOV ON DDOCAUTO.COD_DOC = DMOV.COD_DOC INNER JOIN DDOC ON DMOV.COD_DOC = DDOC.COD_DOC
where DATA_EMP between convert(datetime,´02/05/2007´,103) and convert(datetime,´19/06/2007´,103)
GROUP BY dmov.cod_doc, nome, sobrenome, titulo

[color=green:5c9d8c3753]Texto do post editado. Favor não postar tudo em maiúsculas[/color:5c9d8c3753]


Responder

20/06/2007

Marcioabreu

pelo que eu entendi, vc tem uam cross table...
Eu sugiro que vc faça uma query para os autores com os respectivos codigos (primary keys) por uma select distinct, daí vc adiciona a nova tabela através do inner join e vc vai ter o resultado esperado... o Distinct vai trazer mais de um elemento da tabela onde ele está pesquisando, mas apenas o retira uma vez este elemento ´DESTINTO´, essa é a única saída sem utilizar cross tables...


Responder

20/06/2007

Bolomaster

Blz, resolvi meu problema criei uma tabela, utilizando o select into, e depois disso, eu consegui colocar o distinct, mas nao era exatamente o que eu queria, mas funcionou
ok
muito obrigado e o topico ja pode ser fechado


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar