Sql 计算每个CustomerID的结果数

Sql 计算每个CustomerID的结果数,sql,sql-server,Sql,Sql Server,我正在调查给客户打电话的情况,我需要一个列来统计以前给同一客户打电话的结果 例如,之前有多少次通话以“无联系”结束 我一直在研究情况WHEN函数和LAG函数,但我还没有得到我想要的结果 下面是我试图实现的目标的示例(Priornotested专栏): 您希望在客户端的第一条记录和当前记录之前的记录之间有一个条件窗口sum()。大多数RDBMS支持窗口函数中的行之间的子句: select t.*, sum(case when Result = 'Not Interested' t

我正在调查给客户打电话的情况,我需要一个列来统计以前给同一客户打电话的结果

例如,之前有多少次通话以“无联系”结束

我一直在研究
情况WHEN
函数和
LAG
函数,但我还没有得到我想要的结果

下面是我试图实现的目标的示例(Priornotested专栏):


您希望在客户端的第一条记录和当前记录之前的记录之间有一个条件窗口
sum()
。大多数RDBMS支持窗口函数中的
行之间的
子句:

select 
    t.*,
    sum(case when Result = 'Not Interested' then 1 else 0 end)
        over (
            partition by customer_id 
            order by Call_date
            rows between unbounded preceding and 1 preceding
        ) CountNotIntererstedPrior
from mytable t

这是GMB答案的变体,但如果第一次呼叫“不感兴趣”,则不会返回
NULL


您使用的是哪种dbms?这里的大多数人都希望将示例表数据和预期结果作为格式化文本,而不是图像(或图像链接)。在开始之前,请先看一看。我使用的是Microsoft SQL server。我确实尝试以格式化文本的形式上载,但是这张桌子在EditorTanks的GMB中并不是很漂亮——这正是我想要的,它工作得非常完美。谢谢你添加这一点。在我的例子中,去掉空值是很有意义的。
select t.*,
       (sum(v.not_interested) over (partition by t.customer_id order by t.call_date) -
        not_interested
       ) as countnotinterestedprior
from t cross apply
     (values (case when result = 'Not Interested' then 1 else 0 end)
     ) v(not_interested);