CASE WHEN ELSE END中的SQL查询语法进行计数

时间:2018-12-13 18:51:40

标签: sql count sum case case-when

编写查询以查找从非ED单位撤出的ED访问次数。 如果单位是ED单位,则列dep.ADT_UNIT_TYPE_C列存储1。 假定此查询的目的是NULL值是非ED单位。 以下哪个产生这个数字?

我认为它是A,因为在我看来,这听起来是正确的语法。 COUNT(以THEHEN ELSE END为标准格式的情况) 一个有那个。 B没有THEN吗?所以语法不正确? 请帮助我理解这些选择之间的细微差别。

A。)

COUNT( CASE WHEN dep.ADT_UNIT_TYPE_C is NULL  OR dep.ADT_UNIT_TYPE_C <> 1 THEN NULL 
            ELSE 1 
            END )

B。)

COUNT( CASE WHEN dep.ADT_UNIT_TYPE_C is NULL or dep.ADT_UNIT_TYPE_C <> 1 
            ELSE NULL 
            END)

C。)

CASE WHEN dep.ADT_UNIT_TYPE_C Is NULL or dep.ADT_UNIT_TYPE_C <> 1 THEN COUNT (NULL) 
     ELSE COUNT (1) 
     END

D。)

CASE WHEN dep.ADT_UNIT_TYPE_C is NULL or dep.ADT_UNIT_TYPE_C <> 1 THEN COUNT(1) 
     ELSE COUNT(NULL) 
     END

1 个答案:

答案 0 :(得分:1)

您可以计算返回COUNT(*)的记录,并将条件放在where子句中。

如果使用的是Oracle,则可以使用NVL。 下面的示例适用于Oracle,但是如果使用mysql或SQL Server,则可以使用ISNULL函数。

SELECT COUNT(*) FROM dep WHERE NVL(ADT_UNIT_TYPE_C, 0) != 1

但是,您似乎正在将其连接到另一个表,可能是一个访问表。因此,您要计算访问次数。访问可能会存储某种部门ID或将其加入部门的方式。

类似这样的东西:

SELECT COUNT(*) FROM visit v, departments d WHERE v.dep_id = d.dep_id AND NVL(d.ADT_UNIT_TYPE_C, 0) !=1

如果您想要上面显示的整个列表,则要使用分组依据。这将按部门类型显示每次访问的次数。

SELECT COUNT(*) FROM visit v, departments d GROUP BY d.ADT_UNIT_TYPE_C