从聚合结果集中获取唯一值

时间:2014-06-16 18:38:59

标签: sql sql-server-2008

我有一个聚合查询,检查我是否有多条符合某些条件的记录。

  SELECT RegardingObjectId, COUNT(*) FROM [CRM_MSCRM].[dbo].[AsyncOperationBase] a
  where WorkflowActivationId IN ('55D9A3CF-4BB7-E311-B56B-0050569512FE',
  '1BF5B3B9-0CAE-E211-AEB5-0050569512FE',
  'EB231B79-84A4-E211-97E9-0050569512FE',
  'F0DDF5AE-83A3-E211-97E9-0050569512FE',
  '9C34F416-F99A-464E-8309-D3B56686FE58')
  and StatusCode = 10
      group by RegardingObjectId
  having COUNT(*) > 1

这很好,但是AsyncOperationBase中有一个字段是唯一的。假设count(*) = 3,AsyncOperationBaseId中的AsyncOperationBase将有3个不同的值,因为AsyncOperationBase是表的主键。

说实话,我甚至不知道谷歌有哪些术语和表达方式可以找到解决方案。

如果有人有解决方案,还有什么话可以描述我在寻找什么?也许商务智能人员经常会面临这样的要求......

我可以使用SSRS报告来执行此操作,报告可以直观地进行分组,然后我可以扩展每个分组行以获取AsyncOperationBaseId值,但只是通过SQL,我似乎无法找到方法出...

感谢。

1 个答案:

答案 0 :(得分:2)

select * from [CRM_MSCRM].[dbo].[AsyncOperationBase]
where RegardingObjectId in
(
   SELECT RegardingObjectId
   FROM [CRM_MSCRM].[dbo].[AsyncOperationBase] a
   where WorkflowActivationId IN 
   (
     '55D9A3CF-4BB7-E311-B56B-0050569512FE',
     '1BF5B3B9-0CAE-E211-AEB5-0050569512FE',
     'EB231B79-84A4-E211-97E9-0050569512FE',
     'F0DDF5AE-83A3-E211-97E9-0050569512FE',
     '9C34F416-F99A-464E-8309-D3B56686FE58'
   )
   and StatusCode = 10
   group by RegardingObjectId
   having COUNT(*) > 1
)