PL/SQL 计数总计两列

问题描述 投票:0回答:1

我有以下 PL/SQL 代码:

SELECT COUNT(CASE WHEN upper(team) = 'TEAM ONE' THEN 1 END) TEAM_ONE,
COUNT(CASE WHEN upper(team) = 'TEAM TWO' THEN 1 END) TEAM_TWO
from TeamMembers WHERE UPPER(TEAM_NAME) = UPPER('My Team') 

第一队有 8 名成员,第二队有 2 名成员。代码返回:

第一队:8人 第二队:10

显然,两列的计数都在求和。显然,我对计数函数的工作原理并不清楚,但我在网上找到的所有信息都不足以解决这个问题。有人知道发生了什么事以及我如何编写此代码以正确返回每个团队的计数吗?

oracle plsql oracle11g
1个回答
0
投票

这在我的 19c 数据库上运行得很好。
你用的是哪个版本?

样本数据

with
   TeamMembers(team_name, team) as (
      select   'My Team', 'TEAM ONE' from dual
      union all
      select   'My Team', 'TEAM ONE' from dual
      union all
      select   'My Team', 'TEAM ONE' from dual
      union all
      select   'My Team', 'TEAM TWO' from dual
      union all
      select   'My Team', 'TEAM TWO' from dual
   )

SELECT   count(CASE WHEN upper(team) = 'TEAM ONE' THEN 1 END) TEAM_ONE,
         count(CASE WHEN upper(team) = 'TEAM TWO' THEN 1 END) TEAM_TWO
from     TeamMembers
WHERE    UPPER(TEAM_NAME) = UPPER('My Team') ;

可能的解决方案(?)

使用

sum()
而不是
count()
,因为
count()
还将包含
null

© www.soinside.com 2019 - 2024. All rights reserved.