有计数的tsql

有计数的tsql,tsql,count,having,Tsql,Count,Having,我正在使用SSMS 2008,并试图选择属于两个不同事件的消费者数量。这可能是一个简单的查询,但它当前没有返回预期的计数。下面是我的T-SQL代码,它更好地解释了我的尝试: select [Program Quarter], event_name, consumer from #consumer_initiations where [Program Quarter] = 1 --and consumer = 'Byrd, Victoria Lynn' group by [Program Qua

我正在使用SSMS 2008,并试图选择属于两个不同事件的消费者数量。这可能是一个简单的查询,但它当前没有返回预期的计数。下面是我的T-SQL代码,它更好地解释了我的尝试:

select [Program Quarter], event_name, consumer
from #consumer_initiations
where [Program Quarter] = 1  --and consumer = 'Byrd, Victoria Lynn'
group by [Program Quarter], event_name, consumer
having count (distinct event_name) > 1
因此,上面的查询返回0条记录。如果我运行以下查询,我将获得所有记录:

select [Program Quarter], event_name, consumer
from #consumer_initiations
where [Program Quarter] = 1

所以我可以看到这些记录中的一些是在同一个季度,同一个人,但这个人有两个或更多的事件。现在,我如何计算同一个人参与2个或更多事件的次数?

注意:快速离开我的头顶,因此我确信这可以优化:

把问题分解

  • 查找有关季度有多个活动的人员
  • 获取在上述子查询中找到的每个使用者的程序季度、事件名称和使用者
  • 接下来,子查询类似于

    SELECT DISTINCT Consumer
    FROM #consumer_initiations
    WHERE Count(event_name) > 1
    
    完整的查询类似于:

    SELECT [Program Quarter], event_name, consumer   
    FROM #consumer_initiations  
    WHERE consumer IN (SELECT DISTINCT Consumer
    FROM #consumer_initiations
    WHERE Count(event_name) > 1)
    

    然后,我会考虑如何在不使用子查询的情况下对此进行优化。

    我使用了您的结构来创建一些数据,这些数据将生成一些示例输出,如果您愿意,可以复制并粘贴到SSM中

    declare @consumer_initiations table ([Program Quarter] int null, event_name varchar(100) null, consumer varchar(50) null)
    insert into @consumer_initiations ([Program Quarter], event_name, consumer) values (1, 'Event 1', 'Byrd')
    insert into @consumer_initiations ([Program Quarter], event_name, consumer) values (1, 'Event 2', 'Plane')
    insert into @consumer_initiations ([Program Quarter], event_name, consumer) values (2, 'Event 3', 'Train')
    insert into @consumer_initiations ([Program Quarter], event_name, consumer) values (3, 'Event 4', 'Stuff')
    insert into @consumer_initiations ([Program Quarter], event_name, consumer) values (1, 'Event 5', 'Plane')
    
    select [Program Quarter], event_name, consumer
    from @consumer_initiations
    where [Program Quarter] = 1  --and consumer = 'Byrd, Victoria Lynn'
    group by [Program Quarter], event_name, consumer
    having count
    (distinct event_name) > 1
    
    select [Program Quarter], event_name, consumer
    from @consumer_initiations
    where [Program Quarter] = 1
    
    -- Possibly gets more information than needed
    
    select consumer, [Program Quarter], count(event_name) as event_count
    from @consumer_initiations
    where [Program Quarter] = 1
    group by [Program Quarter], consumer
    having COUNT(event_name) > 1 
    
    -- Just displays consumers with more than one event
    
    select consumer, event_count from
    (
    select [Program Quarter], count(event_name) as event_count, consumer
    from @consumer_initiations
    where [Program Quarter] = 1
    group by [Program Quarter], consumer
    having COUNT(event_name) > 1 
    ) as subq
    
    结果

        Program Quarter event_name                                                                                           consumer
    --------------- ---------------------------------------------------------------------------------------------------- --------------------------------------------------
    
    (0 row(s) affected)
    
    Program Quarter event_name                                                                                           consumer
    --------------- ---------------------------------------------------------------------------------------------------- --------------------------------------------------
    1               Event 1                                                                                              Byrd
    1               Event 2                                                                                              Plane
    1               Event 5                                                                                              Plane
    
    (3 row(s) affected)
    
    consumer                                           Program Quarter event_count
    -------------------------------------------------- --------------- -----------
    Plane                                              1               2
    
    (1 row(s) affected)
    
    consumer                                           event_count
    -------------------------------------------------- -----------
    Plane                                              2
    
    (1 row(s) affected)
    

    谢谢阿梅尔文!这正是我要找的!