有计数的tsql
我正在使用SSMS 2008,并试图选择属于两个不同事件的消费者数量。这可能是一个简单的查询,但它当前没有返回预期的计数。下面是我的T-SQL代码,它更好地解释了我的尝试:有计数的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
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)
谢谢阿梅尔文!这正是我要找的!