Array
(
)

Problemas com inner join

Bolomaster
   - 19 jun 2007

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 !!!

Marcioabreu
   - 19 jun 2007

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...

Bolomaster
   - 20 jun 2007

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

Texto do post editado. Favor não postar tudo em maiúsculas

Marcioabreu
   - 20 jun 2007

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...

Bolomaster
   - 20 jun 2007

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