如何根据SQL Server中按客户分区的记录的列值和COUNT()添加标志列
我的SQL Server表如下所示:如何根据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
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