none
contar dos columnas cuando el valor sea true RRS feed

  • Pregunta

  • Tabla datos

    pre1 pre2 pre3 pre4 pre5    I6  I7   I8  I 9 I10

    True         True                       True           True

    lo que quiero es contar por separado las columnas pre cuando su valor sea true cierto y las columnas I cuando su valor sea true cierdo

    en este caso daria 2 por cada uno de los grupos de columnas dos de las columnas pre y dos de las columnas I, tiene que ser en una misma consulta

    lunes, 11 de diciembre de 2017 20:49

Respuestas

  • SELECT
        IIF(pre1 = 'True', 1, 0) + IIF(pre2 = 'True', 1, 0) + IIF(pre3 = 'True', 1, 0)
        IIF(pre4 = 'True', 1, 0) + IIF(pre5 = 'True', 1, 0) AS CountPre,
        IIF(I6 = 'True', 1, 0) + IIF(I7 = 'True', 1, 0) + IIF(I8 = 'True', 1, 0)
        IIF(I9 = 'True', 1, 0) + IIF(I10 = 'True', 1, 0) AS CountI
    FROM
        TableName

    lunes, 11 de diciembre de 2017 21:17

Todas las respuestas

  • SELECT
        IIF(pre1 = 'True', 1, 0) + IIF(pre2 = 'True', 1, 0) + IIF(pre3 = 'True', 1, 0)
        IIF(pre4 = 'True', 1, 0) + IIF(pre5 = 'True', 1, 0) AS CountPre,
        IIF(I6 = 'True', 1, 0) + IIF(I7 = 'True', 1, 0) + IIF(I8 = 'True', 1, 0)
        IIF(I9 = 'True', 1, 0) + IIF(I10 = 'True', 1, 0) AS CountI
    FROM
        TableName

    lunes, 11 de diciembre de 2017 21:17
  • Usa el operador APPLY o una expresion CASE.

    DECLARE @T table (
    sk int NOT NULL IDENTITY PRIMARY KEY,
    pre1 varchar(5),
    pre2 varchar(5),
    pre3 varchar(5),
    pre4 varchar(5),
    pre5 varchar(5),
    I6 varchar(5),
    I7 varchar(5),
    I8 varchar(5),
    I9 varchar(5),
    I10 varchar(5)
    );
    
    
    INSERT INTO @T (
    	pre1,
    	pre2,
    	pre3,
    	pre4,
    	pre5,
    	I6,
    	I7,
    	I8,
    	I9,
    	I10
    	)
    VALUES (
    	'true'  , -- pre1 - varchar(5)
    	NULL, -- pre2 - varchar(5)
    	NULL, -- pre3 - varchar(5)
    	'true'  , -- pre4 - varchar(5)
    	'false', -- pre5 - varchar(5)
    	NULL, -- I6 - varchar(5)
    	'true'  , -- I7 - varchar(5)
    	NULL, -- I8 - varchar(5)
    	'true'  , -- I9 - varchar(5)
    	''  -- I10 - varchar(5)
    	),
    	(
    	'true'  , -- pre1 - varchar(5)
    	NULL, -- pre2 - varchar(5)
    	'false', -- pre3 - varchar(5)
    	NULL, -- pre4 - varchar(5)
    	NULL, -- pre5 - varchar(5)
    	NULL, -- I6 - varchar(5)
    	'true'  , -- I7 - varchar(5)
    	NULL, -- I8 - varchar(5)
    	'true'  , -- I9 - varchar(5)
    	'true'  -- I10 - varchar(5)
    	);
    
    SELECT
    	*
    FROM
    	@T
    	CROSS APPLY
    	(
    	SELECT
    		SUM(CASE WHEN col1 = 'pre' AND col2 = 'true' THEN 1 ELSE 0 END) AS pre_cnt,
    		SUM(CASE WHEN col1 = 'I' AND col2 = 'true' THEN 1 ELSE 0 END) AS I_cnt
    	FROM
    		(
    		VALUES
    			('pre', pre1),
    			('pre', pre2),
    			('pre', pre3),
    			('pre', pre4),
    			('pre', pre5),
    			('I', I6),
    			('I', I7),
    			('I', I8),
    			('I', I9),
    			('I', I10)
    		) AS R1(col1, col2)
    	) AS R2;
    
    SELECT
    	sk,
        pre1,
        pre2,
        pre3,
        pre4,
        pre5,
        I6,
        I7,
        I8,
        I9,
        I10,
    	CASE WHEN pre1 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN pre2 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN pre3 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN pre4 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN pre5 = 'true' THEN 1 ELSE 0 END AS pre_cnt,
    	CASE WHEN I6 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN I7 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN I8 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN I9 = 'true' THEN 1 ELSE 0 END + 
    	CASE WHEN I10 = 'true' THEN 1 ELSE 0 END AS I_cnt
    FROM
    	@T;



    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 11 de diciembre de 2017 21:27