SOMA DE SUBCONSULTA NO SQL SERVER

 Tópico anterior Próximo tópico Novo tópico

SOMA DE SUBCONSULTA NO SQL SERVER

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#490798 - 17/10/2019 09:30:17

HIDDEN
GOIANIA
Cadast. em:Julho/2009


Bom dia pessoal. Preciso fazer a soma de uma subconsulta em uma query SQL Server:


SELECT
    OCRD.CardName
    ,Total=SUM(OINV.DocTotal+OINV.DpmAmnt)
    ,Despesas=SUM(OINV.TotalExpns)
    ,Descontos=SUM(OINV.DiscSum)
    ,Impostos=SUM((SELECT SUM(INV4.TaxSum) FROM INV4 WHERE INV4.DocEntry=OINV.DocEntry))
FROM
    OINV
    INNER JOIN OCRD ON OCRD.CardCode=OINV.CardCode
WHERE
    OINV.DocTotal>0
    AND OINV.DocDate BETWEEN '2019-09-01' AND '2019-09-30'            
    AND OINV.BPLId IN (1,3,4)
    AND OINV.DocType IN ('I','S')
    AND OINV.CANCELED= 'N'
    AND OINV.DocStatus IN ('O','C')
GROUP BY
    OCRD.CardName
ORDER BY
    OCRD.CardName


Bom, evidente que o código acima dará erro. Só coloquei para ilustrar o que eu quero. Preciso somar a coluna impostos (erro: [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Não é possível executar uma função de agregação em uma expressão que contenha uma agregação ou uma subconsulta).

Alguém tem alguma ideia de como fazer a soma dessa sub?



#490799 - 17/10/2019 09:33:18

HIDDEN
GOIANIA
Cadast. em:Julho/2009


Uma forma que chega perto do que eu preciso, mas que não me atende ainda:

SELECT
    OCRD.CardName
    ,Total=SUM(OINV.DocTotal+OINV.DpmAmnt)
    ,Despesas=SUM(OINV.TotalExpns)
    ,Descontos=SUM(OINV.DiscSum)
    ,Impostos=(SELECT SUM(INV4.TaxSum) FROM INV4 WHERE INV4.DocEntry=OINV.DocEntry)
FROM
    OINV
    INNER JOIN OCRD ON OCRD.CardCode=OINV.CardCode
WHERE
    OINV.DocTotal>0
    AND OINV.DocDate BETWEEN '2019-09-01' AND '2019-09-30'            
    AND OINV.BPLId IN (1,3,4)
    AND OINV.DocType IN ('I','S')
    AND OINV.CANCELED= 'N'
    AND OINV.DocStatus IN ('O','C')
GROUP BY
    OCRD.CardName
    ,OINV.DocEntry
ORDER BY
    OCRD.CardName

    
Tirei o SUM e inseri OINV.DocEntry em GroupBy. Mas aí ele não soma a coluna Impostos. Mas eu realmente preciso da soma dessa coluna.



#490800 - 17/10/2019 09:42:32

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Você pode sim fazer join com uma subquery:

SELECT
    OCRD.CardName
    ,Total=SUM(OINV.DocTotal+OINV.DpmAmnt)
    ,Despesas=SUM(OINV.TotalExpns)
    ,Descontos=SUM(OINV.DiscSum)
    ,Impostos=INV4.TASXUM
FROM
    OINV
    INNER JOIN OCRD ON OCRD.CardCode=OINV.CardCode
    INNER JOIN (SELECT SUM(INV4.TaxSum) TAXSUM FROM INV4 GROUP BY DOCENTRY) AS INV4sub ON OINV.DocEntry = INV4.DocEntry
WHERE
    OINV.DocTotal>0
    AND OINV.DocDate BETWEEN '2019-09-01' AND '2019-09-30'            
    AND OINV.BPLId IN (1,3,4)
    AND OINV.DocType IN ('I','S')
    AND OINV.CANCELED= 'N'
    AND OINV.DocStatus IN ('O','C')
GROUP BY
    OCRD.CardName
    ,OINV.DocEntry
ORDER BY
    OCRD.CardName


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#490801 - 17/10/2019 09:43:14

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Não sei se o que fiz está "copia, cola e pronto", mas a idéia é aquilo ali...

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#490802 - 17/10/2019 09:54:58

HIDDEN
GOIANIA
Cadast. em:Julho/2009


Da um erro de associação:

> [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]O identificador de várias partes "INV4.DocEntry" não pôde ser associado. (4104)
  [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]O identificador de várias partes "INV4.TaxSum" não pôde ser associado. (4104)

Mas entendi a lógica. Já é um caminho.



 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário