Ваш пример запроса, хотя краткое неясно ... вы сначала тестируете c1 = 'ND' (сравнение строк) И сравниваете с c.2 (подразумевается, что c.2 логично), затем другой if (c.2 = 'P '...) Я уверен, что вы сокращаете названия столбцов, но это не имеет смысла.Является ли c.2 логическим полем или строковым полем ... одно или другое.
sum(if(c.1 = 'ND' and c.2 is true, if(c.2 = 'P', 1, 0), 0)) as 'ND_true'
sum(if(c.1 = 'ND' and c.2 is false, if(c.2 = 'P', 1, 0), 0)) as 'ND_false'
Вот упрощенная версия того, что, я думаю, вы ищете .. В данном случае вы обеспокоеныс c.1 означает "ND", поэтому поместите это в качестве предложения WHERE, чтобы ограничить то, что извлекается из таблицы.Тогда вам не нужно повторять его как часть теста предложения IF ().Затем просто вставьте «другие» критерии, где у меня есть выражение c.2 ... Так как предложение идентично тому, что тестируется, 2-й и 3-й столбцы указывают, в каком столбце они будут учитываться ...
select
sum( if( c.2, 1, 0 )) as ND_True,
sum( if( c.2, 0, 1 )) as ND_False
from
yourTable c
where
c.1 = 'ND'
Пример: данные
col1 col2
AX true
BC true
ND true <-- this row
XY false
ND true <-- this row
ND false <-- this row
AX false
ND true <-- this row
приведет к тому, что только 4 отмеченные строки будут запрошены с окончательным счетом
ND_True = 3
ND_False = 1