none
Subselect com erro RRS feed

  • Pergunta

  • Bom dia.

    E a primeira vez que faço um subselect em uma query e estou com o seguinte erro(Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.).

    Preciso de uma ajuda pra resolver este erro.

    Segue minha query

    SELECT
    CONCAT(RTRIM(SB.B1_COD), ' - ', SB.B1_DESC)            AS PRODUTO,
    S8.B8_LOTECTL                                          AS LOTE,
    CONVERT(VARCHAR(10), CAST(S8.B8_DTVALID AS DATE), 103) AS VALIDADE,
    CAST(S8.B8_SALDO AS DECIMAL(15,2))                     AS SALDO,
    (SELECT CO.Contagem_1 AS CONTAGEM1, CO.Contagem_2 AS CONTAGEM2, CO.Saldo      AS SALDO
    FROM USUARIOS.dbo.tbl_Contagem010 AS CO)
    FROM DADOSADV.dbo.SB1010 AS SB
    INNER JOIN SB8010 AS S8 WITH (NOLOCK) ON S8.B8_PRODUTO = SB.B1_COD

    WHERE S8.B8_SALDO > 0 AND S8.B8_LOCAL = '01'

    desde já agradeço.


    JUNIOR GUERREIRO T.I

    quinta-feira, 21 de dezembro de 2017 12:11

Respostas

  • Traduza para algo assim

    SELECT CONCAT(RTRIM(SB.B1_COD), ' - ', SB.B1_DESC) AS PRODUTO,
           S8.B8_LOTECTL AS LOTE,
           CONVERT(VARCHAR(10), CAST(S8.B8_DTVALID AS DATE), 103) AS VALIDADE,
           CAST(S8.B8_SALDO AS DECIMAL(15, 2)) AS SALDO,
           LefTable.CONTAGEM1 AS CONTAGEM1,
           LefTable.CONTAGEM2 AS CONTAGEM2,
           LefTable.SALDO AS LefTableSaldo
      FROM DADOSADV.dbo.SB1010 AS SB
      LEFT JOIN (   SELECT CO.Contagem_1 AS CONTAGEM1,
                           CO.Contagem_2 AS CONTAGEM2,
                           CO.Saldo AS SALDO
                      FROM Acesso.Usuarios.dbo.tbl_Contagem010 AS CO) AS LefTable
        ON LefTable.Chave = SB.chave
     INNER JOIN SB8010 AS S8 WITH (NOLOCK)
        ON S8.B8_PRODUTO  = SB.B1_COD;


    Algumas observações veja sua query

    SELECT CONCAT(RTRIM(SB.B1_COD), ' - ', SB.B1_DESC) AS PRODUTO,
           S8.B8_LOTECTL AS LOTE,
           CONVERT(VARCHAR(10), CAST(S8.B8_DTVALID AS DATE), 103) AS VALIDADE,
           CAST(S8.B8_SALDO AS DECIMAL(15, 2)) AS SALDO,
           (   SELECT CO.Contagem_1 AS CONTAGEM1,
                      CO.Contagem_2 AS CONTAGEM2,
                      CO.Saldo AS SALDO
                 FROM Acesso.Usuarios.dbo.tbl_Contagem010 AS CO)
      FROM DADOSADV.dbo.SB1010 AS SB
     INNER JOIN SB8010 AS S8 WITH (NOLOCK)
        ON S8.B8_PRODUTO = SB.B1_COD;

    Algumas premissas em subquerys devem ser seguidas ,como :

    1) esse tipo de sub-query deve retornar apenas uma linha(um campo) não vários como está sendo feito

    CO.Contagem_1 AS CONTAGEM1,
     CO.Contagem_2 AS CONTAGEM2,
    CO.Saldo AS SALDO

    2) vc precisa informar um predicado de ligação entre uma tabela e outra, ou entre uma query(query pai) e outra query (query filha) coisa que não acontece , a questão é como a sub query se relaciona com a query principal ???

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    • Marcado como Resposta Junior Guerreiro quinta-feira, 21 de dezembro de 2017 13:01
    quinta-feira, 21 de dezembro de 2017 12:42

Todas as Respostas

  • Traduza para algo assim

    SELECT CONCAT(RTRIM(SB.B1_COD), ' - ', SB.B1_DESC) AS PRODUTO,
           S8.B8_LOTECTL AS LOTE,
           CONVERT(VARCHAR(10), CAST(S8.B8_DTVALID AS DATE), 103) AS VALIDADE,
           CAST(S8.B8_SALDO AS DECIMAL(15, 2)) AS SALDO,
           LefTable.CONTAGEM1 AS CONTAGEM1,
           LefTable.CONTAGEM2 AS CONTAGEM2,
           LefTable.SALDO AS LefTableSaldo
      FROM DADOSADV.dbo.SB1010 AS SB
      LEFT JOIN (   SELECT CO.Contagem_1 AS CONTAGEM1,
                           CO.Contagem_2 AS CONTAGEM2,
                           CO.Saldo AS SALDO
                      FROM Acesso.Usuarios.dbo.tbl_Contagem010 AS CO) AS LefTable
        ON LefTable.Chave = SB.chave
     INNER JOIN SB8010 AS S8 WITH (NOLOCK)
        ON S8.B8_PRODUTO  = SB.B1_COD;


    Algumas observações veja sua query

    SELECT CONCAT(RTRIM(SB.B1_COD), ' - ', SB.B1_DESC) AS PRODUTO,
           S8.B8_LOTECTL AS LOTE,
           CONVERT(VARCHAR(10), CAST(S8.B8_DTVALID AS DATE), 103) AS VALIDADE,
           CAST(S8.B8_SALDO AS DECIMAL(15, 2)) AS SALDO,
           (   SELECT CO.Contagem_1 AS CONTAGEM1,
                      CO.Contagem_2 AS CONTAGEM2,
                      CO.Saldo AS SALDO
                 FROM Acesso.Usuarios.dbo.tbl_Contagem010 AS CO)
      FROM DADOSADV.dbo.SB1010 AS SB
     INNER JOIN SB8010 AS S8 WITH (NOLOCK)
        ON S8.B8_PRODUTO = SB.B1_COD;

    Algumas premissas em subquerys devem ser seguidas ,como :

    1) esse tipo de sub-query deve retornar apenas uma linha(um campo) não vários como está sendo feito

    CO.Contagem_1 AS CONTAGEM1,
     CO.Contagem_2 AS CONTAGEM2,
    CO.Saldo AS SALDO

    2) vc precisa informar um predicado de ligação entre uma tabela e outra, ou entre uma query(query pai) e outra query (query filha) coisa que não acontece , a questão é como a sub query se relaciona com a query principal ???

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    • Marcado como Resposta Junior Guerreiro quinta-feira, 21 de dezembro de 2017 13:01
    quinta-feira, 21 de dezembro de 2017 12:42
  • Wesley muito obrigado ela ajuda.

    JUNIOR GUERREIRO T.I

    quinta-feira, 21 de dezembro de 2017 13:00
  • Se você tentar usar CONCAT vai te dar o seguinte erro: Msg 195, Level 15, State 10, Line 1. concat' is not a recognized built-in function name.

    Segue uma sintaxe de concatenação para clarear para você.

    SELECT ( 'Happy '+' '+'Birthday '+' '+'11'+' '+'/'+' '+'25') AS Result;  
    quinta-feira, 21 de dezembro de 2017 15:23
  • Se você tentar usar CONCAT vai te dar o seguinte erro: Msg 195, Level 15, State 10, Line 1. concat' is not a recognized built-in function name.

    Segue uma sintaxe de concatenação para clarear para você.

    SELECT ( 'Happy '+' '+'Birthday '+' '+'11'+' '+'/'+' '+'25') AS Result;  

    J.Souza,

    A função Concat() foi adicionado ao Microsoft SQL Server a partir da versão 2012!!! Acredito que você esteja utilizando uma versão anterior.


    Pedro Antonio Galvao Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 21 de dezembro de 2017 16:19