Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunoguitarman

com ifs

Recommended Posts

Galera, teria como eu fazer um código com a idéia do seguinte:

 

select * from zcbp3011
where multiusu = 719
	  and IF(select top 1 cddesbem from zcbp3011
		 where multiusu = 719
				 and nrbemrec = '11'					 
		 order by dtdesbem desc) = 0 print 'Deu certo'

Da forma como está ele dá erro

'Server: Msg 156, Level 15, State 1, Line 15

Incorrect syntax near the keyword 'IF'.'

 

Teria forma de fazer algo semelhante?

Compartilhar este post


Link para o post
Compartilhar em outros sites

'Server: Msg 156, Level 15, State 1, Line 15

Incorrect syntax near the keyword 'IF'.'

não se usa if no select

 

qual é a idéia desse teu IF

 

você faz um select para pagar 1 registro na tabela on multiusu = 719 e nr = 11, e se existir é para fazer o quê?

para que serveria o IF?

 

pode utilizar o case

Compartilhar este post


Link para o post
Compartilhar em outros sites

'Server: Msg 156, Level 15, State 1, Line 15

Incorrect syntax near the keyword 'IF'.'

não se usa if no select

 

qual é a idéia desse teu IF

 

você faz um select para pagar 1 registro na tabela on multiusu = 719 e nr = 11, e se existir é para fazer o quê?

para que serveria o IF?

 

pode utilizar o case

 

É que na verdade isso é uma simplificação daquilo que eu realmente preciso. Basicamente eu faço um sql que seliciona vários bens, mas que tem algumas restrições, por exemplo, esse cddesbem não pode ser 0. Caso não seja 0, ainda tenho que testar pra ver o dtdesbem maior para o bem com aquele nrbemrec se tem o cddesbem igual a 1, então, se tiver, ainda tenho que fazer mais testes...

Abaixo o código até o momento:

 

select cast(nridebem as char ) as  numero, nrincbem as incorporacao, ''mobiliario'' as tipo, vlaqubem as valor, 
dtinidep as dtinidep, 0 as quant, cdideden as denominacao, 0 as conta, 0 as subconta 
from  zcbp7100 mob 
where multiusu = :multiusu 
	  and cdideunp = :cdideunp 
	  and cdidesup = :cdidesup 
	  and cdidelot = :cdidelot 
	  and nridebem not in ( select nridebem from zcbp7220 bai 
									  where bai.multiusu = :multiusu 
												and cast( mob.nridebem as char ) = bai.nridebem 
									and mob.nrincbem = bai.nrincbem 
									and bai.tpidepat = ''mobiliario'' 
									and cdidebai in ( 0,1,2 ) ) 
and nridebem not in ( Select nrbemrec  
								from zcbp3011 
								where multiusu = :multiusu 
										  and tpbemrec = 11 /*tipo Mobiliário*/ 
							  and zcbp3011.nrbemrec = mob.nridebem 
										  and zcbp3011.nrincrec = mob.nrincbem 
								and (cddesbem = 0/*bem em recolhimento*/ 
	   											   /*Do 'or' até 'bem em leilão ainda não encerrado deve ser corrigido'*/
														   or (cddesbem = 1 and nrbemrec in (select nrbemrec 
			   							from zcbp3025 a, zcbp3030 b 
			   							where a.multiusu = :multiusu  
				   						 and b.multiusu = a.multiusu  
				   						 and a.tpbemrec = 11 /*tipo Mobiliário*/ 
													 and a.nrbemrec = zcbp3011.nrbemrec 
														 and a.nrincrec = zcbp3011.nrincrec 
				   						 and a.nrprolei = b.nrprolei 
				   						 and b.dtenclei is NULL))/*bem em leilão ainda não encerrado*/) ) 
and nridebem not in ( Select nridebem from zcbp5020 bri 
								where bri.multiusu = :multiusu 
										  and bri.nridebem = mob.nridebem 
										  and tpidebem = ''mobiliario'' 
										  and cdsaibem = 0 )

A parte a seguir deve ser corrigida, pois não está fazendo direito aquele teste que eu falei.

or (cddesbem = 1 and nrbemrec in (select nrbemrec 
from zcbp3025 a, zcbp3030 b 
where a.multiusu = :multiusu  
		  and b.multiusu = a.multiusu  
		  and a.tpbemrec = 11 /*tipo Mobiliário*/ 
		  and a.nrbemrec = zcbp3011.nrbemrec 
		  and a.nrincrec = zcbp3011.nrincrec 
		  and a.nrprolei = b.nrprolei 
		  and b.dtenclei is NULL))/*bem em leilão ainda não encerrado*/

Então tinha pensado em algo mais ou menos assim:

 

or ( IF (select top 1 h.cddesbem /*Caso cddesbem do bem com dtdesbem mais recente seja igual a 1*/
from zcbp3011 h
where multiusu = 719
and tpbemrec = 11 /*tipo Mobiliário*/ 
and h.nrbemrec = mob.nridebem 
and h.nrincrec = mob.nrincbem 
order by h.dtdesbem desc) = 1

Para depois fazer os testes para ver se leilão ainda não está encerrado, mas, obviamente, esse if não fundiona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.