none
como hacer un count a un Case RRS feed

  • Pregunta

  • Hola, estoy haciendo una consulta de datos hice un CASE para evaluar mi valor almacenado, pero necesito que sea contabilizado el criterio del caso, anexo foto

    Y como se podría hacer para en esta misma consulta evaluar Preg_2 o Preg_3 (los demas campos de mi tabla)


    Octavio Bolloa

    viernes, 11 de septiembre de 2020 1:05

Respuestas

  • Hola Bollua:

    No se aprecia de la imagen lo que quieres hacer. No obstante voy a intentar ayudarte.

    create table dbo.RespMod1
    			 (
    			 userName varchar(100)
    		   , preg_1   varchar(100)
    		   , preg_2   varchar(100)
    		   , preg_3   varchar(100)
    			 );
    go
    Insert into dbo.RespMod1
    (userName, preg_1, preg_2, preg_3)
    values
    ('Ana','a','x','c'),
    ('Ana','x','b','d'),
    ('Ana','a','b','c'),
    ('Ana','x','x','d'),
    ('Bea','x','b','d'),
    ('Bea','x','b','d'),
    ('Bea','x','b','d'),
    ('Bea','a','x','c');
    go


    Creo una tabla con una lista de valores.

    Y ahora distintas variantes de Case

    Select userName, 
    case when preg_1 = 'a' then 1 end as valorPreg1, 
    case when preg_1 = 'a' then 'correcto' end as isOk,
    case when preg_1 = 'a' and preg_2='b' then 2 end as [preg 1 y 2],
    case when preg_1 = 'a' then 1
    	 when preg_2 = 'b' then 2
    	 when preg_3 = 'c' then 3
    	 else 4 end as [3 preguntas],
    case when preg_1 ='a' then 
    	case when preg_2 = 'b' then
    		case when preg_3= 'c' then 3 end
    		else 2 end
    	else 1 
    	end as [resultado concatenado]
    from RespMod1

    Como puedes observar, case evalúa una expresión y si la misma es correcta, entonces devuelve un resultado [valorPreg1]

    Pero puedes repetir la columna con la misma expresión pero otro tipo de salida [isOk]

    También puedes evaluar el valor de dos columnas, puesto que al final case evalúa una expresión.

    O evaluar en diferentes When diferentes expresiones. [3 preguntas]

    También los puedes anidar [resultado concatenado]

    Se pueden hacer más cosas con case, pero básicamente, este es un escenario bastante completo.

    Si por cada respuesta resuelves un valor, luego puedes hacer un Sum.

    Select userName, 
    sum(case when preg_1 = 'a' then 1 end) as valorPreg1, 
    SUM(case when preg_2 = 'b' then 1 end) as valorPreg2,
    SUM(case when preg_3 = 'c' then 1 end) as valorPreg3
    
    from RespMod1
    Group by userName 

    Case

    https://docs.microsoft.com/es-es/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver15

    Si lo que esperas de la pregunta es otra cosa, tendrás que definirlo un poco mejor.


    • Editado Javi Fernández F viernes, 11 de septiembre de 2020 23:10 Mejorar respuesta
    • Marcado como respuesta Bollua viernes, 11 de septiembre de 2020 23:43
    viernes, 11 de septiembre de 2020 23:07

Todas las respuestas

  • Hola, estoy haciendo una consulta de datos hice un CASE para evaluar mi valor almacenado, pero necesito que sea contabilizado el criterio del caso, anexo foto

    Y como se podría hacer para en esta misma consulta evaluar Preg_2 o Preg_3 (los demas campos de mi tabla)


    Octavio Bolloa



    Octavio Bolloa

    viernes, 11 de septiembre de 2020 1:06
  • Hola Octavio Bolloa:

    No se puede ver la foto, al menos, yo de momento no la veo, por tanto no se te puede ayudar.

    Ni en firefox, Ni en ie

    Ni en chrome, ni en edge.

    viernes, 11 de septiembre de 2020 3:05
  • Agradezco la ayuda, en cuanto pueda subo la imagen que no se cargo.

    Octavio Bolloa

    viernes, 11 de septiembre de 2020 3:34
  • anexo la imagen y agradezco la ayuda

    Octavio Bolloa

    viernes, 11 de septiembre de 2020 16:38
  • Hola Bollua:

    No se aprecia de la imagen lo que quieres hacer. No obstante voy a intentar ayudarte.

    create table dbo.RespMod1
    			 (
    			 userName varchar(100)
    		   , preg_1   varchar(100)
    		   , preg_2   varchar(100)
    		   , preg_3   varchar(100)
    			 );
    go
    Insert into dbo.RespMod1
    (userName, preg_1, preg_2, preg_3)
    values
    ('Ana','a','x','c'),
    ('Ana','x','b','d'),
    ('Ana','a','b','c'),
    ('Ana','x','x','d'),
    ('Bea','x','b','d'),
    ('Bea','x','b','d'),
    ('Bea','x','b','d'),
    ('Bea','a','x','c');
    go


    Creo una tabla con una lista de valores.

    Y ahora distintas variantes de Case

    Select userName, 
    case when preg_1 = 'a' then 1 end as valorPreg1, 
    case when preg_1 = 'a' then 'correcto' end as isOk,
    case when preg_1 = 'a' and preg_2='b' then 2 end as [preg 1 y 2],
    case when preg_1 = 'a' then 1
    	 when preg_2 = 'b' then 2
    	 when preg_3 = 'c' then 3
    	 else 4 end as [3 preguntas],
    case when preg_1 ='a' then 
    	case when preg_2 = 'b' then
    		case when preg_3= 'c' then 3 end
    		else 2 end
    	else 1 
    	end as [resultado concatenado]
    from RespMod1

    Como puedes observar, case evalúa una expresión y si la misma es correcta, entonces devuelve un resultado [valorPreg1]

    Pero puedes repetir la columna con la misma expresión pero otro tipo de salida [isOk]

    También puedes evaluar el valor de dos columnas, puesto que al final case evalúa una expresión.

    O evaluar en diferentes When diferentes expresiones. [3 preguntas]

    También los puedes anidar [resultado concatenado]

    Se pueden hacer más cosas con case, pero básicamente, este es un escenario bastante completo.

    Si por cada respuesta resuelves un valor, luego puedes hacer un Sum.

    Select userName, 
    sum(case when preg_1 = 'a' then 1 end) as valorPreg1, 
    SUM(case when preg_2 = 'b' then 1 end) as valorPreg2,
    SUM(case when preg_3 = 'c' then 1 end) as valorPreg3
    
    from RespMod1
    Group by userName 

    Case

    https://docs.microsoft.com/es-es/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver15

    Si lo que esperas de la pregunta es otra cosa, tendrás que definirlo un poco mejor.


    • Editado Javi Fernández F viernes, 11 de septiembre de 2020 23:10 Mejorar respuesta
    • Marcado como respuesta Bollua viernes, 11 de septiembre de 2020 23:43
    viernes, 11 de septiembre de 2020 23:07
  • Hola muchas gracias, me fue muy útil  tu respuesta, y ya quedo resuelto el tema.

    Gracias por el apoyo.


    Octavio Bolloa

    sábado, 12 de septiembre de 2020 0:00