2013-03-22 87 views
2

我正在尝试计算发生的事件''的计数'。 数据可能看起来像这样。计数'交易次数'

Cust # Trans# TransType LineItem 
42  5000  1   1 
42  6000  1   1 
42  6000  1   2 
42  6000  2   1 
42  6000  2   2 
42  6000  2   3 

对于任何给定的交易编号可以有多种交易类型。在这个例子中,我希望返回的'交易数'计数是'3',因为Trans#5000只有一个不同的TransType,而6000有两个。如果我对Trans#做一个明确的计数,我会得到'2',如果我只计算一次,我会得到'6'。

我试着工作:

COUNT(DISTINCT CASE Trans# WHEN ???? THEN 1 ELSE null END) AS [Num of Transactions],  

但我知道,我不太在正确的轨道。如果任何人都可以指引我正确的方向,那将非常感激。

回答

1

试试这个: -

with cte as 
(
    Select Cust,Trans,row_number() over (partition by trans,TransType order by cust) rn 
    from Sample 
) 
Select count(*) as TransCount from cte 
where rn=1 

SQL FIDDLE DEMO

+1

感谢您的支持。我是SQL新手,所以这个答案迫使我去查找和理解WITH和OVER :) – user2199661 2013-03-23 04:07:32

1

您可以使用以下方法来获得不同的transtype的计数为每一个客户和交易:如果你想

select cust, 
    trans, 
    count(distinct transtype) cnt 
from yourtable 
group by cust, trans; 

然后您可以将sum()应用于查询:

select sum(cnt) Total 
from 
(
    select cust, 
    trans, 
    count(distinct transtype) cnt 
    from yourtable 
    group by cust, trans 
) src 

查看这两个查询的SQL Fiddle with Demo

+0

感谢您的答复。该解决方案也可以正常工作 – user2199661 2013-03-23 04:07:56