I am able to use COUNT(*) AS CNT_TOT, SUM(VAR1="") AS CNT1_MISSING,
SUM(VAR2="") AS CNT2_MISSING, etc; in many other SQL tools,
such as Microsoft SQL
No, you're not, at least not as you have shown the code (see the actual SQL Server test below).
In SQL Anywhere, you can use SUM ( IF-expression ) to count true/false boolean expressions.
SQL Server doesn't have IF-expressions, but it does have CASE-expressions which you can use.
-------------------------------------------------------------------- -- SQL Anywhere 17 CREATE TABLE t ( VAR1 VARCHAR ( 10 ), VAR2 VARCHAR ( 10 ) ); INSERT t VALUES ( '', '' ); INSERT t VALUES ( 'X', '' ); INSERT t VALUES ( 'X', 'X' ); COMMIT; SELECT COUNT(*) AS CNT_TOT, SUM(IF VAR1='' THEN 1 ELSE 0 END IF) AS CNT1_MISSING, SUM(IF VAR2='' THEN 1 ELSE 0 END IF) AS CNT2_MISSING FROM t; CNT_TOT CNT1_MISSING CNT2_MISSING ----------- ------------ ------------ 3 1 2 -------------------------------------------------------------------- -- SQL Server 2012 - 11.0.5343.0 (X64) CREATE TABLE t ( VAR1 VARCHAR ( 10 ), VAR2 VARCHAR ( 10 ) ) INSERT t VALUES ( '', '' ) INSERT t VALUES ( 'X', '' ) INSERT t VALUES ( 'X', 'X' ) GO SELECT COUNT(*) AS CNT_TOT, SUM(VAR1="") AS CNT1_MISSING, SUM(VAR2="") AS CNT2_MISSING FROM t GO Msg 102, Level 15, State 1, Server XPS\SQLEXPRESS, Line 1 Incorrect syntax near ')'. SELECT COUNT(*) AS CNT_TOT, SUM(CASE WHEN VAR1='' THEN 1 ELSE 0 END) AS CNT1_MISSING, SUM(CASE WHEN VAR2='' THEN 1 ELSE 0 END) AS CNT2_MISSING FROM t GO CNT_TOT CNT1_MISSING CNT2_MISSING ----------- ------------ ------------ 3 1 2