none
Select dentro do outro RRS feed

  • Pergunta

  • Ola pessoal

    Estou precisando fazer um select dentro do outro como no exemplo abaixo, mas esta dando erro no from,

    alguem pode me ajudar

    select distinct

     (tblwrirecepcao.PK_Recepcao) as Numero_Recepcao,

     (tblwrirecepcao.DtRecep) as Data_Recepcao,

     (tblWRITipoPrenotacao.TipoPrenotacao) as Tipo_Prenotacao,

     (tblwrititulos.DtPrevisaoEntrega) as Data_Limite

     from

     (select max(tblwriandamentos.data)

     from tblwriandamentos

     )

    from tblWRIAndamentos ( ESTA DANDO ERRO AQUI!!!!!)

    inner join tblwrititulos        on tblwrititulos.FK_tblWRIRecepcaoRecepcao = tblwriandamentos.FK_tblWRIRecepcaoRecepcao

    inner join tblWRITpAndamentos   on tblWRITpAndamentos.PK_Id = tblwriandamentos.FK_tblWRITpAndamento_Id

    inner join tblwrirecepcao       on tblwrirecepcao.pk_recepcao= tblwriandamentos.FK_tblWRIRecepcaoRecepcao

    inner join tblSIPUsuarios       on tblSIPUsuarios.IDUser = tblwriandamentos.FK_tblWRIUsuarioOrigem_Id

    inner join tblWRITipoPrenotacao on tblWRITipoPrenotacao.PK_ID = tblWRIRecepcao.TipoPrenotacao

    Where (      (YEAR (tblwrititulos.DtPrevisaoEntrega) BETWEEN 

                 YEAR(GETDATE()) - 1

                            AND YEAR(GETDATE()))

                                And         tblWRIRecepcao.DtRecep >= GETDATE() - 12

                               And        tblWRIRecepcao.DtExpiraReentrada Is Null

                               And    tblWRIRecepcao.DtCancelamento Is Null

                               And    tblWRITitulos.DataUltimoRegistro Is Null

                               And    tblWRITitulos.DtDevolucao Is Null

                               And     tblWRITipoPrenotacao.PK_ID in (1,2,3,12))

    ORDER BY tblwrititulos.DtPrevisaoEntrega



    • Editado Felipe_Senna1 segunda-feira, 22 de julho de 2013 13:52 ACRES
    segunda-feira, 22 de julho de 2013 13:51

Todas as Respostas

  • Felipe,

    Tente desta forma:

    select distinct
     (tblwrirecepcao.PK_Recepcao) as Numero_Recepcao,
     (tblwrirecepcao.DtRecep) as Data_Recepcao,
     (tblWRITipoPrenotacao.TipoPrenotacao) as Tipo_Prenotacao,
     (tblwrititulos.DtPrevisaoEntrega) as Data_Limite
    ,
     (select max(tblwriandamentos.data)
     from tblwriandamentos
     ) As Campo
    from tblWRIAndamentos 
    inner join tblwrititulos        on tblwrititulos.FK_tblWRIRecepcaoRecepcao = tblwriandamentos.FK_tblWRIRecepcaoRecepcao
    inner join tblWRITpAndamentos   on tblWRITpAndamentos.PK_Id = tblwriandamentos.FK_tblWRITpAndamento_Id
    inner join tblwrirecepcao       on tblwrirecepcao.pk_recepcao= tblwriandamentos.FK_tblWRIRecepcaoRecepcao
    inner join tblSIPUsuarios       on tblSIPUsuarios.IDUser = tblwriandamentos.FK_tblWRIUsuarioOrigem_Id
    inner join tblWRITipoPrenotacao on tblWRITipoPrenotacao.PK_ID = tblWRIRecepcao.TipoPrenotacao
    Where (      (YEAR (tblwrititulos.DtPrevisaoEntrega) BETWEEN 
                 YEAR(GETDATE()) - 1
                            AND YEAR(GETDATE()))
                                And         tblWRIRecepcao.DtRecep >= GETDATE() - 12
                               And        tblWRIRecepcao.DtExpiraReentrada Is Null
                               And    tblWRIRecepcao.DtCancelamento Is Null
                               And    tblWRITitulos.DataUltimoRegistro Is Null
                               And    tblWRITitulos.DtDevolucao Is Null
                               And     tblWRITipoPrenotacao.PK_ID in (1,2,3,12))
    ORDER BY tblwrititulos.DtPrevisaoEntrega

    Havia um FROM perdido ai no meio que não deveria existir.


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com

    • Sugerido como Resposta fernando silva 1 segunda-feira, 22 de julho de 2013 15:05
    segunda-feira, 22 de julho de 2013 13:58
    Moderador
  • Fabrizzio, obrigado deu certo,

    So uma duvida

    Como ficaria, pois estou precisando colocar mais um item no segundo select, e esta dando este erro:

    (select max(tblwriandamentos.data), tblwriandamentos.usuario
    from tblwriandamentos
    ) As Campo

    Msg 116, Level 16, State 1, Line 34

    Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

    segunda-feira, 22 de julho de 2013 15:33
  • Coloca um "alias" para seu MAX.

    (select max(tblwriandamentos.data) AS MAXIMO, tblwriandamentos.usuario 
    from tblwriandamentos
    ) As Campo

    segunda-feira, 22 de julho de 2013 16:33
  • deu o mesmo erro
    segunda-feira, 22 de julho de 2013 16:42
  • Felipe, do modo que esta feito seu subselect não é possivel colocar dois campos para retorno.

    Você pode colocar esta parte no seu INNER, mais ou menos assim:

    select distinct
     (tblwrirecepcao.PK_Recepcao) as Numero_Recepcao,
     (tblwrirecepcao.DtRecep) as Data_Recepcao,
     (tblWRITipoPrenotacao.TipoPrenotacao) as Tipo_Prenotacao,
     (tblwrititulos.DtPrevisaoEntrega) as Data_Limite,
     MAXIMODATA.DATA,
     MAXIMODATA.usuario
    --  (select max(tblwriandamentos.data) from tblwriandamentos )
    from tblWRIAndamentos -- ( ESTA DANDO ERRO AQUI!!!!!)
    inner join tblwrititulos        on tblwrititulos.FK_tblWRIRecepcaoRecepcao = tblwriandamentos.FK_tblWRIRecepcaoRecepcao
    inner join tblWRITpAndamentos   on tblWRITpAndamentos.PK_Id = tblwriandamentos.FK_tblWRITpAndamento_Id
    inner join tblwrirecepcao       on tblwrirecepcao.pk_recepcao= tblwriandamentos.FK_tblWRIRecepcaoRecepcao
    inner join tblSIPUsuarios       on tblSIPUsuarios.IDUser = tblwriandamentos.FK_tblWRIUsuarioOrigem_Id
    inner join tblWRITipoPrenotacao on tblWRITipoPrenotacao.PK_ID = tblWRIRecepcao.TipoPrenotacao
    Where (      (YEAR (tblwrititulos.DtPrevisaoEntrega) BETWEEN 
                 YEAR(GETDATE()) - 1
                            AND YEAR(GETDATE()))
                                And         tblWRIRecepcao.DtRecep >= GETDATE() - 12
                               And        tblWRIRecepcao.DtExpiraReentrada Is Null
                               And    tblWRIRecepcao.DtCancelamento Is Null
                               And    tblWRITitulos.DataUltimoRegistro Is Null
                               And    tblWRITitulos.DtDevolucao Is Null
                               And     tblWRITipoPrenotacao.PK_ID in (1,2,3,12))
    INNER JOIN (
    	(select max(tblwriandamentos.data)DATA, tblwriandamentos.usuario  from tblwriandamentos) as MAXIMODATA
    	ON MAXIMODATA.DATA = tblWRIAndamentos.data 
    		and MAXIMODATA.usuario = tblWRIAndamentos.usuario
    ORDER BY tblwrititulos.DtPrevisaoEntrega 
    

    terça-feira, 23 de julho de 2013 14:41
  • Ola

    Deu um erro no inicio do inner join 

    INNER JOIN ( -- aqui
    (select max(tblwriandamentos.data)DATA, tblwriandamentos.usuario  from tblwriandamentos) as MAXIMODATA
    ON MAXIMODATA.DATA = tblWRIAndamentos.data 
    and MAXIMODATA.usuario = tblWRIAndamentos.usuario
    ORDER BY tblwrititulos.DtPrevisaoEntrega 

    Msg 156, Level 15, State 1, Line 24
    Incorrect syntax near the keyword 'INNER'.
    Msg 156, Level 15, State 1, Line 25
    Incorrect syntax near the keyword 'as'.

    quinta-feira, 25 de julho de 2013 19:24
  • Felipe,

    Cria uma função inline no seu subselect e use o operador cross apply

    http://msdn.microsoft.com/en-us/library/ms175156(v=SQL.105).aspx

    abs

    Douglas

    quinta-feira, 25 de julho de 2013 20:16
  • Errei o local do inner:

    select distinct
     (tblwrirecepcao.PK_Recepcao) as Numero_Recepcao,
     (tblwrirecepcao.DtRecep) as Data_Recepcao,
     (tblWRITipoPrenotacao.TipoPrenotacao) as Tipo_Prenotacao,
     (tblwrititulos.DtPrevisaoEntrega) as Data_Limite,
     MAXIMODATA.DATA,
     MAXIMODATA.usuario
    --  (select max(tblwriandamentos.data) from tblwriandamentos )
    from tblWRIAndamentos -- ( ESTA DANDO ERRO AQUI!!!!!)
    inner join tblwrititulos        on tblwrititulos.FK_tblWRIRecepcaoRecepcao = tblwriandamentos.FK_tblWRIRecepcaoRecepcao
    inner join tblWRITpAndamentos   on tblWRITpAndamentos.PK_Id = tblwriandamentos.FK_tblWRITpAndamento_Id
    inner join tblwrirecepcao       on tblwrirecepcao.pk_recepcao= tblwriandamentos.FK_tblWRIRecepcaoRecepcao
    inner join tblSIPUsuarios       on tblSIPUsuarios.IDUser = tblwriandamentos.FK_tblWRIUsuarioOrigem_Id
    inner join tblWRITipoPrenotacao on tblWRITipoPrenotacao.PK_ID = tblWRIRecepcao.TipoPrenotacao
    
    INNER JOIN (
    	(select max(tblwriandamentos.data)DATA, tblwriandamentos.usuario  from tblwriandamentos) ) as MAXIMODATA
    	ON MAXIMODATA.DATA = tblWRIAndamentos.data 
    		and MAXIMODATA.usuario = tblWRIAndamentos.usuario
    		
    Where (      (YEAR (tblwrititulos.DtPrevisaoEntrega) BETWEEN 
                 YEAR(GETDATE()) - 1
                            AND YEAR(GETDATE()))
                                And         tblWRIRecepcao.DtRecep >= GETDATE() - 12
                               And        tblWRIRecepcao.DtExpiraReentrada Is Null
                               And    tblWRIRecepcao.DtCancelamento Is Null
                               And    tblWRITitulos.DataUltimoRegistro Is Null
                               And    tblWRITitulos.DtDevolucao Is Null
                               And     tblWRITipoPrenotacao.PK_ID in (1,2,3,12))
    
    ORDER BY tblwrititulos.DtPrevisaoEntrega 

    Agora deve estar correto.

    []´s

    quinta-feira, 25 de julho de 2013 20:18