none
A subconsulta retornou mais de 1 valor RRS feed

  • Pergunta

  • Bom galera sou novo em SQL estou tendo o seguinte Erro  

    "Msg 512, Level 16, State 1, Line 2
    A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão".

    MINHA QUERY É ESSA 

    SELECT   TURNO, TB_ESSENCIA.NOME_ESSENCIA, SUM(TB_TORAS.VOL_C) AS VOL_TORAS,
                       (SELECT SUM(SOMA) VOL_SERRADO FROM 
                       (SELECT   NOME_ESSENCIA, ISNULL(SUM(TOTAL_GERAL),0) AS SOMA
                        FROM TB_SERRA_ABERTO
    
                       INNER JOIN TB_ESSENCIA ON TB_ESSENCIA.ID_ESSENCIA = TB_SERRA_ABERTO.ESSENCIA
                       
     
                       WHERE  NOME_ESSENCIA LIKE '%'+ '' +'%' AND DATA_CADASTRO  BETWEEN '17/10/2015'  AND '17/10/2015'   
                       GROUP BY NOME_ESSENCIA
      
                       UNION
    
                       SELECT   NOME_ESSENCIA, ISNULL(SUM(VOLUME),0)AS SOMA FROM  TB_ROMANEIO_SERRABRUTO
     
                       INNER JOIN TB_ESSENCIA ON TB_ESSENCIA.ID_ESSENCIA = TB_ROMANEIO_SERRABRUTO.ESSENCIA_BRUTO
                       INNER JOIN TB_SERRA_BRUTO ON TB_SERRA_BRUTO.ID_FARDO = TB_ROMANEIO_SERRABRUTO.N_FARDO
    
                       WHERE  NOME_ESSENCIA LIKE '%'+ '' +'%' AND DATA  BETWEEN '17/10/2015'  AND '17/10/2015' 
                       GROUP BY NOME_ESSENCIA )
                          
                       VIRTUAL    GROUP BY NOME_ESSENCIA ) 
                       
                                        
                       FROM TB_BAIXA_TORA 
                       
                       INNER JOIN TB_DETALHES_BAIXA_TORA ON TB_DETALHES_BAIXA_TORA.ID_BAIXA_TORA = TB_BAIXA_TORA.ID_BAIXA_TORA 
                       INNER JOIN TB_TORAS ON TB_TORAS.ID_TORA = TB_DETALHES_BAIXA_TORA.ID_TORA 
                       INNER JOIN TB_ESSENCIA ON TB_ESSENCIA.ID_ESSENCIA = TB_TORAS.ID_ESSENCIA 
                                                                              
    
                       WHERE  DATA_CADASTRO BETWEEN  '17/10/2015'  AND '17/10/2015' AND TURNO = 'TURNO 01'  AND 
                       NOME_ESSENCIA LIKE '%'+'' + '%' AND   OCORRENCIA = 'SERRADA'
                       
                       GROUP BY NOME_ESSENCIA, TURNO


    domingo, 18 de outubro de 2015 03:20

Respostas

  • Boa noite,

    Não sei se entendi corretamente o objetivo da query, mas desconfio que não é o caso de utilizar uma subconsulta.

    Experimente fazer um teste dessa forma para ver se é obtido o resultado desejado:

    with
        CTE_Union as
        (
            SELECT ESSENCIA, ISNULL(SUM(TOTAL_GERAL), 0) AS SOMA
            FROM TB_SERRA_ABERTO
            -- INNER JOIN TB_ESSENCIA 
            --     ON TB_ESSENCIA.ID_ESSENCIA = TB_SERRA_ABERTO.ESSENCIA
            WHERE 
                 -- NOME_ESSENCIA LIKE '%' + '' + '%' AND 
                 DATA_CADASTRO  BETWEEN '17/10/2015' AND '17/10/2015'   
            GROUP BY ESSENCIA
      
            UNION
    
            SELECT ESSENCIA_BRUTO, ISNULL(SUM(VOLUME), 0) AS SOMA 
            FROM TB_ROMANEIO_SERRABRUTO
            -- INNER JOIN TB_ESSENCIA 
            --     ON TB_ESSENCIA.ID_ESSENCIA = TB_ROMANEIO_SERRABRUTO.ESSENCIA_BRUTO
            INNER JOIN TB_SERRA_BRUTO 
                ON TB_SERRA_BRUTO.ID_FARDO = TB_ROMANEIO_SERRABRUTO.N_FARDO
            WHERE 
                -- NOME_ESSENCIA LIKE '%' + '' + '%' AND 
                DATA BETWEEN '17/10/2015' AND '17/10/2015' 
            GROUP BY ESSENCIA_BRUTO
        ),
    
        CTE_Soma as
        (
            SELECT ESSENCIA, SUM(SOMA) AS VOL_SERRADO 
            FROM CTE_Union
            GROUP BY ESSENCIA
    
        )
    
    
    SELECT TURNO, TB_ESSENCIA.NOME_ESSENCIA, SUM(TB_TORAS.VOL_C) AS VOL_TORAS, CTE_Soma.VOL_SERRADO
    FROM TB_BAIXA_TORA 
    INNER JOIN TB_DETALHES_BAIXA_TORA 
        ON TB_DETALHES_BAIXA_TORA.ID_BAIXA_TORA = TB_BAIXA_TORA.ID_BAIXA_TORA 
    INNER JOIN TB_TORAS 
        ON TB_TORAS.ID_TORA = TB_DETALHES_BAIXA_TORA.ID_TORA 
    INNER JOIN TB_ESSENCIA 
        ON TB_ESSENCIA.ID_ESSENCIA = TB_TORAS.ID_ESSENCIA 
    LEFT JOIN CTE_Soma 
        ON CTE_Soma.ESSENCIA = TB_TORAS.ID_ESSENCIA
    WHERE
        DATA_CADASTRO BETWEEN '17/10/2015' AND '17/10/2015' AND 
        TURNO = 'TURNO 01' AND 
        -- NOME_ESSENCIA LIKE '%' + '' + '%' AND
        OCORRENCIA = 'SERRADA'
    GROUP BY NOME_ESSENCIA, TURNO, VOL_SERRADO

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    domingo, 18 de outubro de 2015 21:58

Todas as Respostas

  • Boa noite,

    Não sei se entendi corretamente o objetivo da query, mas desconfio que não é o caso de utilizar uma subconsulta.

    Experimente fazer um teste dessa forma para ver se é obtido o resultado desejado:

    with
        CTE_Union as
        (
            SELECT ESSENCIA, ISNULL(SUM(TOTAL_GERAL), 0) AS SOMA
            FROM TB_SERRA_ABERTO
            -- INNER JOIN TB_ESSENCIA 
            --     ON TB_ESSENCIA.ID_ESSENCIA = TB_SERRA_ABERTO.ESSENCIA
            WHERE 
                 -- NOME_ESSENCIA LIKE '%' + '' + '%' AND 
                 DATA_CADASTRO  BETWEEN '17/10/2015' AND '17/10/2015'   
            GROUP BY ESSENCIA
      
            UNION
    
            SELECT ESSENCIA_BRUTO, ISNULL(SUM(VOLUME), 0) AS SOMA 
            FROM TB_ROMANEIO_SERRABRUTO
            -- INNER JOIN TB_ESSENCIA 
            --     ON TB_ESSENCIA.ID_ESSENCIA = TB_ROMANEIO_SERRABRUTO.ESSENCIA_BRUTO
            INNER JOIN TB_SERRA_BRUTO 
                ON TB_SERRA_BRUTO.ID_FARDO = TB_ROMANEIO_SERRABRUTO.N_FARDO
            WHERE 
                -- NOME_ESSENCIA LIKE '%' + '' + '%' AND 
                DATA BETWEEN '17/10/2015' AND '17/10/2015' 
            GROUP BY ESSENCIA_BRUTO
        ),
    
        CTE_Soma as
        (
            SELECT ESSENCIA, SUM(SOMA) AS VOL_SERRADO 
            FROM CTE_Union
            GROUP BY ESSENCIA
    
        )
    
    
    SELECT TURNO, TB_ESSENCIA.NOME_ESSENCIA, SUM(TB_TORAS.VOL_C) AS VOL_TORAS, CTE_Soma.VOL_SERRADO
    FROM TB_BAIXA_TORA 
    INNER JOIN TB_DETALHES_BAIXA_TORA 
        ON TB_DETALHES_BAIXA_TORA.ID_BAIXA_TORA = TB_BAIXA_TORA.ID_BAIXA_TORA 
    INNER JOIN TB_TORAS 
        ON TB_TORAS.ID_TORA = TB_DETALHES_BAIXA_TORA.ID_TORA 
    INNER JOIN TB_ESSENCIA 
        ON TB_ESSENCIA.ID_ESSENCIA = TB_TORAS.ID_ESSENCIA 
    LEFT JOIN CTE_Soma 
        ON CTE_Soma.ESSENCIA = TB_TORAS.ID_ESSENCIA
    WHERE
        DATA_CADASTRO BETWEEN '17/10/2015' AND '17/10/2015' AND 
        TURNO = 'TURNO 01' AND 
        -- NOME_ESSENCIA LIKE '%' + '' + '%' AND
        OCORRENCIA = 'SERRADA'
    GROUP BY NOME_ESSENCIA, TURNO, VOL_SERRADO

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    domingo, 18 de outubro de 2015 21:58
  • VALEU AMIGÃO ME AJUDOU MUITO...
    domingo, 18 de outubro de 2015 23:36