none
Utilizar el alias de una tabla dentro de un case RRS feed

  • Pregunta

  • Cordial saludo.

    Tengo una consulta el cual dentro del case hago otra consulta el cual debo tener en cuenta el nocredito para traer el resultado; pero me arroja error en el alias del case.  Esta es mi consulta:

    SELECT 
    	ppsv.crenumero
    	, CASE WHEN COUNT(*) = 0
    		THEN(		
    			SELECT
    				SUM(saldseguro)
    			FROM
    				dbo.pagoseguro
    			WHERE
    				crenumero = ppsv,crenumero
    				AND psperiodocorte < 20185
    		)
    		ELSE(
    			SELECT
    				SUM(saldseguro)
    			FROM
    				dbo.pagoseguro
    			WHERE
    				crenumero = ppsv.crenumero
    		)
    	END AS ValoSegu
    FROM 
    	dbo.planpago AS ppsv
    

    Que tengo mal en la consulta??

    Agradezco de antemano la ayuda que me puedan brindar.

    martes, 19 de junio de 2018 15:57

Todas las respuestas

  • Hola carlostattjok:

    Supongo que el planteamiento.

    Dado que no pones tus tablas ni objetivos, yo entiendo que quieres extraer el saldo de alguien. Si tiene registros este año un valor y sino el completo o algo similar.

    Supongo que tu consulta puede ser algo así.

    SELECT 
    	ppsv.crenumero, isnull(sum(saldseguro),0) as valoSeguro
    	
    FROM 
    	dbo.planpago AS ppsv 
    	left join dbo.pagoseguro t on psspv.crenumero = t.crenumero
    group by ppsv.crenumero

    Dicho de otro modo, estas intentando traer todos los saldos de ppsv.crenumero independientemente de que lo tengan o no.

    Sino ayuda que pongas la defición de las tablas.

    Saludos

    martes, 19 de junio de 2018 16:24
  • No creo que puedas utilizar count(*) como resultado de una expresion que es lo que espera el case.

    SELECT 
    	r.crenumero, case when o.saldo is null then v.saldo else o.saldo end as saldo
    	
    FROM 
    	planpago AS r
    	left join (
    	SELECT
    				SUM(saldseguro) as saldo, c.crenumero
    			FROM
    				dbo.pagoseguro c
    			WHERE
    				c.psperiocorte < '20180101'
    				group by c.crenumero
    	)
    	 as o on r.crenumero = o.crenumero or o.crenumero is null
    	 inner join (
    	 SELECT
    				SUM(saldseguro) as saldo, c.crenumero
    			FROM
    				dbo.pagoseguro c
    			
    				
    				group by c.crenumero
    
    	 ) as v on r.crenumero = v.crenumero
    Pero con algo así puedes resolverlo. Por un lado buscas el total anterior a tu fecha de corte, y en la segunda tabla derivada buscas el total. y el case lo haces por los valores de la primera tabla

    martes, 19 de junio de 2018 17:56