Quantcast
Channel: SCN: Message List - SAP SQL Anywhere
Viewing all articles
Browse latest Browse all 2182

Re: Count total and missing in one query

$
0
0

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

Viewing all articles
Browse latest Browse all 2182

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>