Версия stardard-SQL с использованием логической логики :
SELECT company_name
, COUNT(action = 'EMAIL' OR NULL) AS "Email"
, COUNT(action = 'PRINT' AND pagecount = 1 OR NULL) AS "Print 1 pages"
, COUNT(action = 'PRINT' AND pagecount = 2 OR NULL) AS "Print 2 pages"
, COUNT(action = 'PRINT' AND pagecount = 3 OR NULL) AS "Print 3 pages"
FROM tbl
GROUP BY company_name;
Как?
TRUE OR NULL
дает TRUE
. FALSE OR NULL
дает NULL
. NULL OR NULL
дает NULL
. И COUNT
учитывает только ненулевые значения. Вуаля.