Principales respuestas
contar dos columnas cuando el valor sea true

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
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
- Propuesto como respuesta Juan MondragónModerator lunes, 11 de diciembre de 2017 23:35
- Marcado como respuesta Efrain Diaz martes, 12 de diciembre de 2017 13:21
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
- Propuesto como respuesta Juan MondragónModerator lunes, 11 de diciembre de 2017 23:35
- Marcado como respuesta Efrain Diaz martes, 12 de diciembre de 2017 13:21
-
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- Propuesto como respuesta Juan MondragónModerator lunes, 11 de diciembre de 2017 23:35