Ir para conteúdo
Fórum Script Brasil
  • 0

é possivel fazer sum em subselect


kurole

Pergunta

GALERA porque ESSE SUBSELECT NÃO FUNCIONA DA O SEGUINTE ERRO....

lembrando que consideramos a tabela CADCTR4 poderá sair mais de um resultado mas tem que ser somando pela sum anterior

SELECT    
    SUM( 
        SELECT 
               (        
                    SELECT 
                         SUM(
                               ( (CADIR.percentual/100) * CADCTR2.valor_parcela)
                            ) /* end sum.. */
                    FROM 
                        CADIR
                    WHERE 
                        CADIR.IrCod = 1
                )
    
        FROM 
            CADCTR4
        WHERE
            CADCTR4.CtrCod = CADCTR2.CtrCod AND 
            CADCTR4.CtrParc = CADCTR2.CtrParc
    )
FROM
    CADCTR2
WHERE
    CADCTR2.CtrCod = 10 AND 
    CADCTR2.CtrParc = 2

aguardo marco

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Marco,

Não estou com o sql nesta máquina aqui para testar, mas vamos lá:

- Qual a mensagem de erro?

- A função SUM retorna um valor, correto?

Então no subselect que faz:

SELECT SUM((CADIR.percentual/100) * CADCTR2.valor_parcela) FROM CADIR WHERE CADIR.IrCod = 1

você terá um valor de resultado. Ex.: 1500

Então o outro subselect será montado desta forma:

SELECT SUM(SELECT 1500 FROM CADCTR4 WHERE CADCTR4.CtrCod = CADCTR2.CtrCod AND CADCTR4.CtrParc = CADCTR2.CtrParc) FROM ...

O problema pode estar ai.

O que estava querendo fazer? você pode utilizar, ao invés de subselect´s, o sum de um valor "+" o sum do outro.

Link para o comentário
Compartilhar em outros sites

  • 0

O ERRO É O SEGUINTE....

A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.

DEPOIS DO PRIMEIRO SELECT ESTOU USANDO SUM() teoricamente era para somar caso haja mais de um resultado na subconsulta.. so que não acontece.... e se tirar o sum da o erro acima.. e com o sum não vai ..

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Marco,

Se tirar o SUM, você estará tentando atribuir mais de um valor para uma variável.

O mesmo erro dará se fizer isto (onde a tabela NomeTabela tenha mais de uma coluna):

Declare @Valor int

Set @Valor = (select * from NomeTabela)

Faça o seguinte: desmembre os selects, vá rodando um a um e incorporando novamente na estrutura que montou.

No caso abaixo:

SELECT

SUM(

SELECT

(

SELECT

SUM(

( (CADIR.percentual/100) * CADCTR2.valor_parcela)

) /* end sum.. */

FROM

CADIR

WHERE

CADIR.IrCod = 1

)

FROM

CADCTR4

WHERE

CADCTR4.CtrCod = CADCTR2.CtrCod AND

CADCTR4.CtrParc = CADCTR2.CtrParc

)

FROM

CADCTR2

WHERE

CADCTR2.CtrCod = 10 AND

CADCTR2.CtrParc = 2

Rode em separado o select que está em negrito. Ele te retornará um valor. Pegue o valor e rode o outro select, utilizando agora o valor de retorno (vamos supor que o valor de retorno seja 1500). Ficará assim:

SELECT

SUM(

SELECT

(

1500

)

FROM

CADCTR4

WHERE

CADCTR4.CtrCod = CADCTR2.CtrCod AND

CADCTR4.CtrParc = CADCTR2.CtrParc

)

FROM

CADCTR2

WHERE

CADCTR2.CtrCod = 10 AND

CADCTR2.CtrParc = 2

O próximo select ficará montado desta forma (em negrito):

SELECT

SUM(

SELECT (1500)

FROM

CADCTR4

WHERE

CADCTR4.CtrCod = CADCTR2.CtrCod AND

CADCTR4.CtrParc = CADCTR2.CtrParc

)

FROM

CADCTR2

WHERE

CADCTR2.CtrCod = 10 AND

CADCTR2.CtrParc = 2

O que o sql está entendo neste select: retorne a soma do valor 1500 (que será ele mesmo) caso o resultado for alguma coisa. Independente do que o resultado trouxer, o valor sempre será 1500.

Rode somente este select e faça os testes alterando a cláusula "where", para trazer novos valores de retorno.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...