Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

No me arroja el resultado de un case count

Estas en el tema de No me arroja el resultado de un case count en el foro de Bases de Datos General en Foros del Web. Cordial saludo Estoy trabajando con Sql server 2014 y tengo el siguient script el cual si le coloco el group by al query no me ...
  #1 (permalink)  
Antiguo 25/06/2018, 19:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta No me arroja el resultado de un case count

Cordial saludo

Estoy trabajando con Sql server 2014 y tengo el siguient script el cual si le coloco el group by al query no me arroja ni cero caso contrario cuando se lo quito si aparece 0.

En mi caso es necesario ya que esta consulta la necesito hacer en un join y dependiendo del case hace el select respectivo y no entiendo porque nunca ejecuta el case.
En el caso del crenumero que esta en el ejemplo me trae

ValoSeguVida

Pero si le quito el group by si sale

ValoSeguVida
0

Código SQL:
Ver original
  1. DECLARE @crenumero INT
  2.     DECLARE @fechSist smalldatetime
  3.     SET @crenumero = 23455
  4.     SET @fechSist = '2018-06-21'
  5.  
  6.     DECLARE @periCier INT
  7.     DECLARE @periActu INT
  8.     DECLARE @fechCier SMALLDATETIME
  9.     DECLARE @fechActu SMALLDATETIME
  10.  
  11.         --obtenemos la fecha del sistemas menos un mes
  12.     SET @fechCier = CONVERT ( VARCHAR (10), DATEADD(MONTH, -1, @fechSist), 101)
  13.     --obtemos el último periodo que se han causado seguro de vida
  14.     SET @periCier = CONVERT ( CHAR (4), datepart(YEAR, @fechCier)) + '' + CONVERT ( CHAR (2), datepart(MONTH, @fechCier))
  15.  
  16.  
  17.     SELECT
  18.         CASE WHEN COUNT(*)  = 0
  19.             THEN(      
  20.                 SELECT
  21.                     SUM(rpsvsaldosegurovida)
  22.                 FROM
  23.                     dbo.fin_reportepagosegurovida
  24.                 WHERE
  25.                     crenumero = @crenumero
  26.                     AND rpsperiodocorte < @periCier
  27.             )
  28.             ELSE(
  29.                 SELECT
  30.                     SUM(rpsvsaldosegurovida)
  31.                 FROM
  32.                     dbo.fin_reportepagosegurovida
  33.                 WHERE
  34.                 crenumero = @crenumero
  35.             )
  36.         END AS ValoSeguVida
  37.     FROM
  38.         fin_planpago AS ppsv
  39.     WHERE
  40.         ppsv.ppfecha <= @fechActu
  41.         AND ppsv.crenumero = @crenumero
  42.         AND CONVERT ( CHAR (4), datepart(YEAR, ppsv.ppfecha)) + '' + CONVERT ( CHAR (2), datepart(MONTH, ppsv.ppfecha)) = @periActu
  43.     GROUP BY ppsv.crenumero
[/QUOTE]

Agradezco de antemano las sugerencias y ayudas que me puedan brindar

Última edición por gnzsoloyo; 29/06/2018 a las 07:44
  #2 (permalink)  
Antiguo 26/06/2018, 07:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: No me arroja el resultado de un case count

Prueba con esto:

Código SQL:
Ver original
  1. SELECT
  2.  COUNT(*),
  3. ppsv.crenumero
  4. FROM
  5. fin_planpago AS ppsv
  6. WHERE
  7. ppsv.ppfecha <= @fechActu
  8. AND ppsv.crenumero = @crenumero
  9. AND CONVERT ( CHAR (4), datepart(YEAR, ppsv.ppfecha)) + '' + CONVERT ( CHAR (2), datepart(MONTH, ppsv.ppfecha)) = @periActu
  10. GROUP BY ppsv.crenumero

Ahi te vas a dar cuenta cuantos valores deberia de entrar en 0, quizas tienes mas de un valor al momento de agrupar por eso con el group by no te aparece el resultado esperado
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 29/06/2018, 07:28
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta Respuesta: No me arroja el resultado de un case count

Cordial saludo libras

Ejecute el script que me comentas y la razon por la que no me arroja 0 es porque no tiene registros en esa tabla de acuerdo a la condicion.

Hay alguna forma de asignarle al count el valor de 0 cuando no existe un registro ???

Agradezco de antemano la ayuda y sugerencias que me puedan hacer

Etiquetas: case, count, resultado, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:31.