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],    

但我知道我并不完全在正确的轨道上。如果有人能指出我正确的方向,将不胜感激。

4

2 回答 2

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 小提琴演示

于 2013-03-22T15:13:05.050 回答
1

您可以使用以下内容来获取每个客户和交易的不同转换类型的计数:

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 。

于 2013-03-22T15:13:40.090 回答