Inquiridor
Select dentro do outro

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
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
-
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.
-
-
-
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
-
Ola
Deu um erro no inicio do inner join
INNER JOIN ( -- aqui
Msg 156, Level 15, State 1, Line 24
(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
Incorrect syntax near the keyword 'INNER'.
Msg 156, Level 15, State 1, Line 25
Incorrect syntax near the keyword 'as'. -
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
-
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