SQL计数发生有计数> 2有条件

时间:2014-05-19 11:16:35

标签: sql sql-server count having

我需要计算多行中表中相同值的出现次数。

作为例子

http://sqlfiddle.com/#!6/8ca74/13

有一个包含多列主键的表(列A |列B)。

(fID_a)    |   type
1          |   'type A'
1          |   'type B'
2          |   'type A'
3          |   'type B'
3          |   'type D'
...
9          |   'type A'
9          |   'type B'

如何计算所有类型组合的出现次数

以上示例的预期结果

type            |     count
'type A'        |     1
'type A type B' |     2
'type B type D' |     1

这仅适用于A列中的单次出现

SELECT Count(*) AS count, 
       type 
FROM   tbl_a 
WHERE  fid_a IN (SELECT fid_a 
                 FROM   tbl_a 
                 GROUP  BY fid_a 
                 HAVING Count(*) = 1) 
GROUP  BY tbl_a.type; 

1 个答案:

答案 0 :(得分:1)

您可以使用字符串聚合将它们组合为每个fID_a值,然后在该结果上进行聚合。这在SQL Server中有点痛苦,但可能:

select types, count(*), min(fID_a), max(fID_a)
from (select fID_a,
             stuff((select ',' + type
                    from tbl_a a2
                    where a2.fID_a = a.fID_a
                    order by type
                    for xml path ('')
                   ), 1, 1, '') as types
      from tbl_a a
      group by fID_a
     ) t
group by types;

我添加了其他id的最小值和最大值,因此您可以仔细检查结果。