Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写SQL查询以记录呼叫中心操作?_Sql_Sql Server - Fatal编程技术网

如何编写SQL查询以记录呼叫中心操作?

如何编写SQL查询以记录呼叫中心操作?,sql,sql-server,Sql,Sql Server,我有两张桌子: 表1 历史 -------------------------------------------------------------------- Callplacetime | Finish Code | Address | Identidy 2018-09-26 16:29:08:000 | No Answer | ABC | 10

我有两张桌子:

表1 历史

--------------------------------------------------------------------
Callplacetime            | Finish Code         | Address   | Identidy                                
2018-09-26 16:29:08:000  | No Answer           | ABC       | 10                                  
2018-10-15 12:37:08:000  | Voicemail           | ABC       | 10                                 
2018-10-16 18:40:09:000  | No Answer           | ABC       | 10                                
2018-10-16 21:29:08:000  | No Answer           | ABC       | 10                                  
2018-10-19 04:57:10:000  | Appointment Booked  | ABC       | 10                                
2018-09-26 16:29:57:000  | No Answer           | XYZ       | 20                                 
2018-10-15 16:29:08:000  | Voicemail           | XYZ       | 20                                
2018-10-15 18:29:08:000  | Appointment Booked  | XYZ       | 20                                
2018-10-25 16:29:08:000  | Appointment Booked  | MNO       | 30                                 
表2 列表

---------------------------------------------
Address  |   Identity  
ABC      |   10
XYZ      |   20
MNO      |   30
我希望数据显示为

Callplacetime            | Finish Code         | Address   | Attempts by Agents
2018-09-26 16:29:08:000  | No Answer           | ABC       | Attemp1 
2018-10-15 12:37:08:000  | Voicemail           | ABC       | Attemp2
2018-10-16 18:40:09:000  | No Answer           | ABC       | Attemp3
2018-10-16 21:29:08:000  | No Answer           | ABC       | Attemp4  
2018-10-19 04:57:10:000  | Appointment Booked  | ABC       | Attemp5
2018-09-26 16:29:57:000  | No Answer           | XYZ       | Attemp1 
2018-10-15 16:29:08:000  | Voicemail           | XYZ       | Attemp2
2018-10-15 18:29:08:000  | Appointment Booked  | XYZ       | Attemp3
2018-10-25 16:29:08:000  | Appointment Booked  | MNO       | Attemp1 
因此,基本上,代理呼叫特定地址(客户)。如果他只给那个地址打了一次电话,那么“代理尝试”列会说“尝试1”,如果他第二次打同一个地址,那么“尝试2”,依此类推。代理最多可以尝试5次。当然,最近的“callplacetime”是代理的最新尝试


如何编写查询,根据上述场景添加代理尝试列?

您可以使用窗口函数和字符串连接

select *, 
'Attempt' + cast(row_number() over (partition by Address order by Callplacetime) as varchar)
from [History]
作为旁注,我不确定
列表
表的用途。我希望您需要加入它,根据
历史记录表中的
标识
获取
地址
。。。但是您将其包括在
历史记录表中,因此我不确定ERD在这里是什么样子。

您可以这样做

CREATE TABLE T
    ([Callplacetime] datetime, [Finish Code] varchar(18), [Address] varchar(3), [Identidy] int)
;

INSERT INTO T
    ([Callplacetime], [Finish Code], [Address], [Identidy])
VALUES
    ('2018-09-26 16:29:08', 'No Answer', 'ABC', 10),
    ('2018-10-15 12:37:08', 'Voicemail', 'ABC', 10),
    ('2018-10-16 18:40:09', 'No Answer', 'ABC', 10),
    ('2018-10-16 21:29:08', 'No Answer', 'ABC', 10),
    ('2018-10-19 04:57:10', 'Appointment Booked', 'ABC', 10),
    ('2018-09-26 16:29:57', 'No Answer', 'XYZ', 20),
    ('2018-10-15 16:29:08', 'Voicemail', 'XYZ', 20),
    ('2018-10-15 18:29:08', 'Appointment Booked', 'XYZ', 20),
    ('2018-10-25 16:29:08', 'Appointment Booked', 'MNO', 30);

SELECT Callplacetime,
       [Finish Code],
       Address,
       'Attempt' + 
       CAST(ROW_NUMBER() OVER (PARTITION BY Identidy ORDER BY Callplacetime) AS VARCHAR(10)) [Attempts by Agents]
FROM T;
返回:

+---------------------+--------------------+---------+--------------------+
|    Callplacetime    |    Finish Code     | Address | Attempts by Agents |
+---------------------+--------------------+---------+--------------------+
| 26/09/2018 16:29:08 | No Answer          | ABC     | Attempt1           |
| 15/10/2018 12:37:08 | Voicemail          | ABC     | Attempt2           |
| 16/10/2018 18:40:09 | No Answer          | ABC     | Attempt3           |
| 16/10/2018 21:29:08 | No Answer          | ABC     | Attempt4           |
| 19/10/2018 04:57:10 | Appointment Booked | ABC     | Attempt5           |
| 26/09/2018 16:29:57 | No Answer          | XYZ     | Attempt1           |
| 15/10/2018 16:29:08 | Voicemail          | XYZ     | Attempt2           |
| 15/10/2018 18:29:08 | Appointment Booked | XYZ     | Attempt3           |
| 25/10/2018 16:29:08 | Appointment Booked | MNO     | Attempt1           |
+---------------------+--------------------+---------+--------------------+


由于您的第一张表已经包含了
Address
列,我看不出第二张表的目的是什么?

您在第一篇文章中做得相当不错,但这将有助于您避免将来的否决票。我想您希望按callplacetime排序该顺序基于callplacetime。由于您按此顺序插入了数据,因此数据正常工作,但不能保证保持不变。但如果是你的话,是我派你来的。点击那个链接<代码>2018年10月15日12:37:08语音邮件
正在尝试1。然后在第二个查询中,您将看到我的查询如何正确运行…顺序确实很重要。。。如果他第二次调用同一个地址,那么尝试2等等,您的代码不会导致这种情况。第二个时间是第二个实例,由
Callplacetime
列确定。这并不难,因为它的
Identidy
列不是
IDENTITY
,我认为您应该指定
VARCHAR
:)的长度,通常是@Sami,但casting不像不指定那样默认为VARCHAR(8)<代码>选择强制转换(12316354166512316516516作为varchar)
。他们的
历史记录表中也有
地址
。关于
Identity
你是对的,但是我确信这是一个输入错误,因为
列表中的列名是不受欢迎的,但是你选择的答案是错误的。只是提醒一下。。。除非Sami更改查询,否则您将遇到问题