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



编写查询以查找从非急诊室出院的急诊就诊次数。如果单元是ED单元,则列dep.ADT_UNIT_TYPE_C列存储1。假设NULL值是用于此查询的非ED单位。以下哪一项产生这个数字?

我认为它是A,因为在我看来,这听起来是正确的语法。计数(CASE WHEN THEN ELSE END标准格式(A有。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

您可以计算返回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

相关内容

  • 没有找到相关文章