Notifications
Clear all

Retornando Somatoria do para subselect

4 Posts
2 Usuários
0 Likes
1,284 Visualizações
(@rafaeld)
Posts: 6
Active Member
Topic starter
 

Bom dia a todos!

Pessoal,
preciso de uma ajuda para retornar os campos grifados em vermelho para a consulta ... Tentei de todas as formas que conheço e nao consegui.

segue abaixö:

select

hr.Cod_Mes,
hr.`O#S#`,
hr.CC,
prod.`OPERACAO AGRICOLA`

from

(SELECT
`BD_MOTOMEC$`.Cod_Mes,
`BD_MOTOMEC$`.mes,
`BD_MOTOMEC$`.Cod_SAP,
`BD_MOTOMEC$`.CC,
`BD_MOTOMEC$`.`O#S#`,
`BD_MOTOMEC$`.Operação,
Sum(`BD_MOTOMEC$`.TOTAL) AS 'Soma de TOTAL'

FROM `BD_MOTOMEC$` `BD_MOTOMEC$`
WHERE (`BD_MOTOMEC$`.Operação In (701.0,704.0))

GROUP BY
`BD_MOTOMEC$`.Cod_Mes,
`BD_MOTOMEC$`.mes,
`BD_MOTOMEC$`.Cod_SAP,
`BD_MOTOMEC$`.CC,
`BD_MOTOMEC$`.`O#S#`,
`BD_MOTOMEC$`.Operação) hr,

(SELECT
`BD_OS$`.CC,
`BD_OS$`.Mes,
`BD_OS$`.`ORDEM SERVIÇO`,
`BD_OS$`.`COD# OPERAÇÃO AGRICOLA`,
`BD_OS$`.`OPERACAO AGRICOLA`,
Sum(`BD_OS$`.`ÁREA DO TALHÃO`) AS 'Soma de ÁREA DO TALHÃO'

FROM `BD_OS$` `BD_OS$`
WHERE (`BD_OS$`.`COD# OPERAÇÃO AGRICOLA` In (701.0,704.0))

GROUP BY
`BD_OS$`.CC,
`BD_OS$`.Mes,
`BD_OS$`.`ORDEM SERVIÇO`,
`BD_OS$`.`COD# OPERAÇÃO AGRICOLA`,
`BD_OS$`.`OPERACAO AGRICOLA`) prod

where
hr.`O#S#` = prod.`ORDEM SERVIÇO`

order by
hr.Cod_Mes

 
Postado : 29/05/2017 8:55 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43753
Illustrious Member
 

Eu evitaria ao máximo usar nomes de colunas com espaços, então a primeira coisa é, renomeie as colunasm, assim:

'OPERACAO AGRICOLA' para 'OPERACAO_AGRICOLA'
'ORDEM SERVIÇO' para 'ORDEM_SERVICO'
'COD# OPERAÇÃO AGRICOLA' para 'COD_OPERACAO_AGRICOLA'
'ÁREA DO TALHÃO' para ' AREA_DO_TALHAO'

Aí não serão necessários apóstrofes ou crases...
E eu reescrevi a consulta assim:

SELECT 
	HR.COD_MES,
	HR.O#S#,
	HR.CC,
	PROD.OPERACAO_AGRICOLA
FROM
	(SELECT 
		BD_MOTOMEC$.COD_MES, 
		BD_MOTOMEC$.MES, 
		BD_MOTOMEC$.COD_SAP, 
		BD_MOTOMEC$.CC, 
		BD_MOTOMEC$.O#S#, 
		BD_MOTOMEC$.OPERAÇÃO, 
		SUM(BD_MOTOMEC$.TOTAL) AS 'SOMA DE TOTAL'
	FROM 
		BD_MOTOMEC$ BD_MOTOMEC$
	WHERE 
		(BD_MOTOMEC$.OPERAÇÃO IN (701,704))
	GROUP BY 
		BD_MOTOMEC$.COD_MES, 
		BD_MOTOMEC$.MES, 
		BD_MOTOMEC$.COD_SAP, 
		BD_MOTOMEC$.CC, 
		BD_MOTOMEC$.O#S#, 
		BD_MOTOMEC$.OPERAÇÃO) HR,

	(SELECT 
		BD_OS$.CC, 
		BD_OS$.MES, 
		BD_OS$.ORDEM_SERVICO, 
		BD_OS$.COD_OPERACAO_AGRICOLA, 
		BD_OS$.OPERACAO_AGRICOLA, 
		SUM(BD_OS$.AREA_DO_TALHAO) AS 'SOMA DE ÁREA DO TALHÃO'
	FROM 
		BD_OS$ BD_OS$
	WHERE 
		(BD_OS$.COD_OPERACAO_AGRICOLA IN (701,704))
	GROUP BY 
		BD_OS$.CC, 
		BD_OS$.MES, 
		BD_OS$.ORDEM_SERVICO, 
		BD_OS$.COD_OPERACAO_AGRICOLA, 
		BD_OS$.OPERACAO_AGRICOLA) PROD
WHERE
	HR.O#S# = PROD.ORDEM_SERVICO

ORDER BY
	HR.COD_MES

Em tempo, sugiro que você aprenda a usar o INNER JOIN..
Ah, se vc não quiser, ou não puder, trocar o nome das colunas, eu entendo, blz, mas neste caso use os apóstrofos somente nas colunas cujo nome tem espaços... *(é péssima prática de de programação e gerenciamento de dados...)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/05/2017 8:38 am
(@rafaeld)
Posts: 6
Active Member
Topic starter
 

Fernando, toda consulta esta funcionando corretamente.
O que eu não consigo fazer é inserir os campos calculados dentro da resultado, abaixo exemplo:

SELECT
HR.COD_MES,
HR.O#S#,
HR.CC,
PROD.OPERACAO_AGRICOLA
SUM(BD_OS$.AREA_DO_TALHAO) AS 'SOMA DE ÁREA DO TALHÃO', ( não consigo inserir)
SUM(BD_MOTOMEC$.TOTAL) AS 'SOMA DE TOTAL' (Não consigo inserir)
Obs. Para ambos eu fiz a alteração do nome conforme sugerido e quando vou incluir nao desconsidero a soma, pois ja faço a soma nos outros dois selects abaixo.

 
Postado : 30/05/2017 9:04 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43753
Illustrious Member
 

1) Tente executar separadamente as subconsultas usadas no FROM...
2) Tente criar view *ou consulta, se estiver no access) para cada uma delas,
3) Execute pedaço por pedaço o que vc fez ali, é assim:

Essa é sua estrutura externa:

SELECT 
    CAMPOS 
FROM 
    TABELA1, 
    TABELA2
WHERE 
    TABELA1.ID = TABELA2.ID
ORDER BY 
    TABELA1.MES

Só que TABELA1 é um select com group by e TABELA2 é outro select, também com group by.

Até aí, beleza, execute o select da TABELA1. Que seria:
SELECT
CAMPO1, CAMPO2, SUM(CAMPO3)
FROM
TAB1
WHERE
TAB1.CAMPO_DO_FILTRO IN (701,704)
GROUP BY
CAMPO1, CAMPO2

Você precisa testar individualmente, os selects internos, e colocar aqui qual é a mensagem de erro, isso ajudaria muito !
Pode acontecer de não poder usar group by em subconsulta, já que não pode usar order by, por exemplo...

Por isso a ideia 2 lá em cima, se vc criar uma consulta, uma view, vc talvez pode usar isso internamente na view, ...

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/05/2017 9:22 am