如何根据SQL Server中按客户分区的记录的列值和COUNT()添加标志列

如何根据SQL Server中按客户分区的记录的列值和COUNT()添加标志列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的SQL Server表如下所示: DayNo. Customer AgentsInvolved CallID DesiredFlag ------------------------------------------------------- 0 AAA 1 1858 0 0 AAA 3 1859 0 2 AA

我的SQL Server表如下所示:

 DayNo. Customer    AgentsInvolved  CallID   DesiredFlag
 -------------------------------------------------------
   0      AAA              1        1858          0 
   0      AAA              3        1859          0
   2      AAA              1        1860          0
   0      BBB              2        1862          0
   0      CCC              1        1863          1
   0      DDD              3        1864          0
   9      DDD              1        1865          0
   9      DDD              4        1866          0
我如何添加一个新的列来表示

WHEN (DayNo. = 0, and AgentsInvolved = 1) AND COUNT(callID) = 1 (grouped by customer)
   THEN 1 
   ELSE 0
我理解的列值可以包装到case语句中,但不确定如何为COUNTCallID添加条件。查看DesiredFlag列以查看我试图实现的结果

任何帮助都会很好。

我会使用不存在的:

使用示例数据:

declare @T Table (DayNo int,Customer varchar(10),AgentsInvolved int,CallID int)
insert into @T values
(0,'AAA',1,1858),
(0,'AAA',3,1859),
(2,'AAA',1,1860),
(0,'BBB',2,1862),
(0,'CCC',1,1863),
(0,'DDD',3,1864),
(9,'DDD',1,1865),
(9,'DDD',4,1866)
您可以通过以下方式获得我正确理解的结果:

;with summation as
(
    select Customer, count(1) as qty
    from @T
    group by Customer
)
select
    T.*,
    coalesce(F.flag, 0) as flag
from
    @T T
    inner join summation s on s.Customer = T.Customer
    outer apply (select 1 as flag where DayNo = 0 and AgentsInvolved = 1 and qty = 1) F
结果:

DayNo       Customer   AgentsInvolved CallID      flag
----------- ---------- -------------- ----------- -----------
0           AAA        1              1858        0
0           AAA        3              1859        0
2           AAA        1              1860        0
0           BBB        2              1862        0
0           CCC        1              1863        1
0           DDD        3              1864        0
9           DDD        1              1865        0
9           DDD        4              1866        0

总计数似乎已关闭。我用来获取正确列表的查询是这样做的:从“表”中选择客户,count1,其中DayNo=0,agentInvolved=1,按客户分组,count1=1。这给了我一个与计算列中的汇总标志不同的行数。有什么想法吗?@dragonfury2。这就是这个查询所做的,除了计数。是的,我认为你的查询是正确的忽略我的最后一条评论。然而,我认为我没有正确地解释逻辑。所以我只对那些客户只存在于DayNo的记录感兴趣。0,并且agentInvolved=1,并且在第0天只有一个CallID。我试图找到只打过一次电话的客户,第一次联系总是在第0天,并与1个代理通话。希望这能把事情弄清楚一点。
DayNo       Customer   AgentsInvolved CallID      flag
----------- ---------- -------------- ----------- -----------
0           AAA        1              1858        0
0           AAA        3              1859        0
2           AAA        1              1860        0
0           BBB        2              1862        0
0           CCC        1              1863        1
0           DDD        3              1864        0
9           DDD        1              1865        0
9           DDD        4              1866        0