SQL - 没有分组计数?我需要使用两个id进行连接

时间:2015-01-30 02:36:56

标签: sql sybase-iq

我以为我可以计算一个列并将其添加为列,因为我可以使用总和,但是我得到一个关于必须分组/拥有的错误。我想要的一个例子......

初始表......

 Global ID    Local ID   Name       Role
 100          1          Andy       Manager
 100          2          Andy       Manager
 100          1          John       Co-Manager
 200          1          Andy       Co-Manager
 200          2          John       Manager
 200          2          Mike       Manager

然后,我想添加一个列,计算每个组/本地配对中的Manager数...

 Global ID    Local ID   Name       Role         Manager Count
 100          1          Andy       Manager      1
 100          2          Andy       Manager      1    
 100          1          John       Co-Manager   0
 200          1          Andy       Co-Manager   0
 200          2          John       Manager      2
 200          2          Mike       Manager      2

我尝试只加入全局/本地ID上的两个表,然后添加一个列来计算Role的数量。问题是我收到有关分组/分组的错误,但我不想将任何内容分组。我只想添加列,但仍然具有相同的行数。有什么方法吗?

仅供参考 - 对于最后两行,最后一列有2,因为John和Mike在同一组/本地ID上

1 个答案:

答案 0 :(得分:1)

看起来您对组的定义是[global_id,local_id]的唯一组合。如果是这种情况,您确实需要group by这两个值,并进行计数,其中角色为Manager。但是因为你想要原始表中的其他列,你必须在内联视图中进行计数,然后再加入原始表,如下所示:

select t.*, v.mgr_in_grp
  from tbl t
  left join (select global_id, local_id, count(*) as mgr_in_grp
               from tbl
              where role = 'Manager'
              group by global_id, local_id) v
    on t.global_id = v.global_id
   and t.local_id = v.local_id

小提琴: http://sqlfiddle.com/#!2/fb3ace/2/0

请注意,与预期输出相比,第3行存在差异。

分别是global_id和local_id 100和1的共同经理John,属于一个在该组合中有一个经理的对(Andy,你的第一行)。所以计数应该是1。