对于我试图跟踪的每个呼叫,我都有多行数据。数据如下所示
Call_ID | site | Agent_key | starttime | exit_reason
----------------------------------------------------
1234 | 7 | | 1 | transfer
1234 | 3 | 1010101 | 15 | transfer
1234 | 7 | 2121212 | 302 | transfer
1234 | 5 | 3232323 | 680 | transfer
我想创建一个名为"first_site“的列。当starttime为min(starttime)且Agent_key不为空时,参数为site。(如果Agent_key为null,则意味着呼叫仍在呼叫中心系统中,因此我不关心那里表示的是哪个站点。
结果将如下所示
Call_ID | site | Agent_key | starttime | exit_reason | first_site |
-------------------------------------------------------------------
1234 | 7 | | 1 | transfer | 3 |
1234 | 3 | 1010101 | 15 | transfer | 3 |
1234 | 7 | 2121212 | 302 | transfer | 3 |
1234 | 5 | 3232323 | 680 | transfer | 3 |
如有任何建议,我们将不胜感激!
发布于 2012-11-14 11:08:55
希望这能有所帮助
Select t.*, x.first_site
From YourTable t
Inner Join
(Select Call_Id,Min(site) As first_site
From YourTable
Where agent_key is not null -- Where Len(agent_key) > 0
Group By Call_Id)X
On t.Call_Id = x.Call_Id
发布于 2012-11-14 12:08:45
您可以使用简单的标量SUBQUERY来实现这一点。
select outr.*, (select TOP 1 site
from tbl
where call_id=outr.call_id
and agent_key is not null
order by starttime asc) first_site
from tbl outr;
如果你需要构建一个网站,例如"IVR“如果没有,则使用ISNULL()
select outr.*, ISNULL((select TOP 1 site
from tbl
where call_id=outr.call_id
and agent_key is not null
order by starttime asc), 'IVR') first_site
from tbl outr;
发布于 2012-11-14 16:51:25
我的查询在没有附加表连接的情况下执行。;)
SELECT Call_ID, site, Agent_key, starttime, exit_reason,
CASE WHEN MIN(CASE WHEN Agent_key IS NOT NULL THEN starttime END) OVER () = starttime
THEN site
ELSE CASE WHEN MIN(CASE WHEN Agent_key IS NOT NULL THEN starttime END) OVER () != starttime
THEN MIN(CASE WHEN Agent_key IS NOT NULL THEN site END) OVER () END
END AS first_site
FROM dbo.your_table
上的演示
https://stackoverflow.com/questions/13372392
复制相似问题