34,838
社区成员




declare @tb table (产品代码 varchar(10),数据期间 datetime,接听状态 int)
insert into @tb select '妈咪乐','2007-06-01 09:20:05.453',0
union all select '热水瓶','2007-06-01 14:11:33.767',3
union all select '妈咪乐','2007-06-01 14:42:34.077',2
union all select '热水瓶','2008-06-01 14:50:51.323',2
union all select '妈咪乐','2008-06-01 14:51:00.157',3
union all select '妈咪乐','2008-06-02 14:54:22.173',3
union all select '热水瓶','2008-06-02 14:55:19.377',2
union all select '妈咪乐','2009-05-01 14:57:09.500',2
union all select '热水瓶','2009-05-01 15:20:28.750',2
union all select '妈咪乐','2009-06-02 15:28:44.843',2
union all select '妈咪乐','2009-06-01 15:39:48.900',2
union all select '妈咪乐','2009-06-02 09:42:48.643',0
----跨年
select 产品代码,数据期间=year(数据期间),呼入电话量= isnull(sum(case when 接听状态 IN(0,2) then 1 end),0),
已接电话= isnull(sum(case when 接听状态=0 then 1 end),0),未接电话= isnull(SUM( case when 接听状态=3 then 1 end),0),
回呼电话量= isnull(sum(case when 接听状态=2 then 1 end),0) from @tb
group by 产品代码,YEAR(数据期间) order by 产品代码
---跨月
select 产品代码,数据期间=convert(nvarchar(7),数据期间,120),呼入电话量= isnull(sum(case when 接听状态 IN(0,2) then 1 end),0),
已接电话= isnull(sum(case when 接听状态=0 then 1 end),0),未接电话= isnull(SUM( case when 接听状态=3 then 1 end),0),
回呼电话量= isnull(sum(case when 接听状态=2 then 1 end),0) from @tb
group by 产品代码,convert(nvarchar(7),数据期间,120) order by 产品代码
--跨日
select 产品代码,数据期间=convert(nvarchar(10),数据期间,120),呼入电话量= isnull(sum(case when 接听状态 IN(0,2) then 1 end),0),
已接电话= isnull(sum(case when 接听状态=0 then 1 end),0),未接电话= isnull(SUM( case when 接听状态=3 then 1 end),0),
回呼电话量= isnull(sum(case when 接听状态=2 then 1 end),0) from @tb
group by 产品代码,convert(nvarchar(10),数据期间,120) order by 产品代码
--按时
select 产品代码,数据期间=convert(nvarchar(13),数据期间,120),呼入电话量= isnull(sum(case when 接听状态 IN(0,2) then 1 end),0),
已接电话= isnull(sum(case when 接听状态=0 then 1 end),0),未接电话= isnull(SUM( case when 接听状态=3 then 1 end),0),
回呼电话量= isnull(sum(case when 接听状态=2 then 1 end),0) from @tb
group by 产品代码,convert(nvarchar(13),数据期间,120) order by 产品代码
--按分
select 产品代码,数据期间=convert(nvarchar(16),数据期间,120),呼入电话量= isnull(sum(case when 接听状态 IN(0,2) then 1 end),0),
已接电话= isnull(sum(case when 接听状态=0 then 1 end),0),未接电话= isnull(SUM( case when 接听状态=3 then 1 end),0),
回呼电话量= isnull(sum(case when 接听状态=2 then 1 end),0) from @tb
group by 产品代码,convert(nvarchar(16),数据期间,120) order by 产品代码
(12 行受影响)
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---------- ----------- ----------- ----------- ----------- -----------
妈咪乐 2007 2 1 0 1
妈咪乐 2008 0 0 2 0
妈咪乐 2009 4 1 0 3
热水瓶 2007 0 0 1 0
热水瓶 2008 2 0 0 2
热水瓶 2009 1 0 0 1
警告: 聚合或其他 SET 操作消除了 Null 值。
(6 行受影响)
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---------- ------- ----------- ----------- ----------- -----------
妈咪乐 2007-06 2 1 0 1
妈咪乐 2008-06 0 0 2 0
妈咪乐 2009-05 1 0 0 1
妈咪乐 2009-06 3 1 0 2
热水瓶 2007-06 0 0 1 0
热水瓶 2008-06 2 0 0 2
热水瓶 2009-05 1 0 0 1
警告: 聚合或其他 SET 操作消除了 Null 值。
(7 行受影响)
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---------- ---------- ----------- ----------- ----------- -----------
妈咪乐 2007-06-01 2 1 0 1
妈咪乐 2008-06-01 0 0 1 0
妈咪乐 2008-06-02 0 0 1 0
妈咪乐 2009-05-01 1 0 0 1
妈咪乐 2009-06-01 1 0 0 1
妈咪乐 2009-06-02 2 1 0 1
热水瓶 2007-06-01 0 0 1 0
热水瓶 2008-06-01 1 0 0 1
热水瓶 2008-06-02 1 0 0 1
热水瓶 2009-05-01 1 0 0 1
警告: 聚合或其他 SET 操作消除了 Null 值。
(10 行受影响)
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---------- ------------- ----------- ----------- ----------- -----------
妈咪乐 2007-06-01 09 1 1 0 0
妈咪乐 2007-06-01 14 1 0 0 1
妈咪乐 2008-06-01 14 0 0 1 0
妈咪乐 2008-06-02 14 0 0 1 0
妈咪乐 2009-05-01 14 1 0 0 1
妈咪乐 2009-06-01 15 1 0 0 1
妈咪乐 2009-06-02 09 1 1 0 0
妈咪乐 2009-06-02 15 1 0 0 1
热水瓶 2007-06-01 14 0 0 1 0
热水瓶 2008-06-01 14 1 0 0 1
热水瓶 2008-06-02 14 1 0 0 1
热水瓶 2009-05-01 15 1 0 0 1
警告: 聚合或其他 SET 操作消除了 Null 值。
(12 行受影响)
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---------- ---------------- ----------- ----------- ----------- -----------
妈咪乐 2007-06-01 09:20 1 1 0 0
妈咪乐 2007-06-01 14:42 1 0 0 1
妈咪乐 2008-06-01 14:51 0 0 1 0
妈咪乐 2008-06-02 14:54 0 0 1 0
妈咪乐 2009-05-01 14:57 1 0 0 1
妈咪乐 2009-06-01 15:39 1 0 0 1
妈咪乐 2009-06-02 09:42 1 1 0 0
妈咪乐 2009-06-02 15:28 1 0 0 1
热水瓶 2007-06-01 14:11 0 0 1 0
热水瓶 2008-06-01 14:50 1 0 0 1
热水瓶 2008-06-02 14:55 1 0 0 1
热水瓶 2009-05-01 15:20 1 0 0 1
警告: 聚合或其他 SET 操作消除了 Null 值。
(12 行受影响)
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---------- -------------------------- ----------- ----------- ----------- -----------
妈咪乐 2007 2 0 0 1
热水瓶 2007 0 0 1 0
妈咪乐 2008 0 0 2 0
热水瓶 2008 2 0 0 2
妈咪乐 2009 4 0 0 3
热水瓶 2009 1 0 0 1
CREATE TABLE TAB(产品代码 varchar(10),数据期间 datetime,接听状态 char(1))
insert TAB
select '妈咪乐','2007-06-01 09:20:05.453','0' union all
select'热水瓶','2007-06-01 14:11:33.767','3' union all
select'妈咪乐','2007-06-01 14:42:34.077','2' union all
select'热水瓶','2008-06-01 14:50:51.323','2' union all
select'妈咪乐','2008-06-01 14:51:00.157','3' union all
select'妈咪乐','2008-06-02 14:54:22.173','3' union all
select'热水瓶','2008-06-02 14:55:19.377','2' union all
select'妈咪乐','2009-05-01 14:57:09.500','2' union all
select'热水瓶','2009-05-01 15:20:28.750','2' union all
select'妈咪乐','2009-06-02 15:28:44.843','2' union all
select'妈咪乐','2009-06-01 15:39:48.900','2' union all
select'妈咪乐','2009-06-02 09:42:48.643','0'
DECLARE @Start DATETIME
DECLARE @End DATETIME
SET @Start='2007-08-09 10:22:22'
SET @End='2009-06-02 10:28:22'
SELECT 产品代码,
CASE WHEN DATEDIFF(yy,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),4)
ELSE (CASE WHEN DATEDIFF(mm,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),7)
ELSE (CASE WHEN DATEDIFF(dd,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),10)
ELSE (CASE WHEN DATEDIFF(mm,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),13)+':00:00'
ELSE (CASE WHEN DATEDIFF(mm,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),16)+':00' END)END) END) END)
END AS 数据期间
,ISNULL(SUM(CASE WHEN 接听状态='0' OR 接听状态='2' THEN 1 END),'') AS 呼入电话量
,ISNULL(SUM(CASE WHEN 接听状态='1' THEN 1 END),'') AS 已接电话
,ISNULL(SUM(CASE WHEN 接听状态='3' THEN 1 END),'') AS 未接电话
,ISNULL(SUM(CASE WHEN 接听状态='2' THEN 1 END),'') AS 回呼电话量
FROM TAB
GROUP BY 产品代码,
CASE WHEN DATEDIFF(yy,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),4)
ELSE (CASE WHEN DATEDIFF(mm,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),7)
ELSE (CASE WHEN DATEDIFF(dd,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),10)
ELSE (CASE WHEN DATEDIFF(mm,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),13)+':00:00'
ELSE (CASE WHEN DATEDIFF(mm,@Start,@End)>0 THEN LEFT(CONVERT(VARCHAR(20),数据期间,120),16)+':00' END)END) END) END)
END
DROP TABLE TAB
--3
GROUP BY 产品代码,CONVERT(VARCHAR(13),数据期间,120)
--4
GROUP BY 产品代码,CONVERT(VARCHAR(16),数据期间,120)
DECLARE @TB TABLE([产品代码] NVARCHAR(3), [数据期间] DATETIME, [接听状态] INT)
INSERT @TB
SELECT N'妈咪乐', '2007-06-01 09:20:05.453', 0 UNION ALL
SELECT N'热水瓶', '2007-06-01 14:11:33.767', 3 UNION ALL
SELECT N'妈咪乐', '2007-06-01 14:42:34.077', 2 UNION ALL
SELECT N'热水瓶', '2008-06-01 14:50:51.323', 2 UNION ALL
SELECT N'妈咪乐', '2008-06-01 14:51:00.157', 3 UNION ALL
SELECT N'妈咪乐', '2008-06-02 14:54:22.173', 3 UNION ALL
SELECT N'热水瓶', '2008-06-02 14:55:19.377', 2 UNION ALL
SELECT N'妈咪乐', '2009-05-01 14:57:09.500', 2 UNION ALL
SELECT N'热水瓶', '2009-05-01 15:20:28.750', 2 UNION ALL
SELECT N'妈咪乐', '2009-06-02 15:28:44.843', 2 UNION ALL
SELECT N'妈咪乐', '2009-06-01 15:39:48.900', 2 UNION ALL
SELECT N'妈咪乐', '2009-06-02 09:42:48.643', 0
--1
SELECT 产品代码,
YEAR(数据期间) AS 数据期间,
SUM(CASE WHEN [接听状态] IN (0,2) THEN 1 ELSE 0 END) AS [呼入电话量],
SUM(CASE WHEN [接听状态]=0 THEN 1 ELSE 0 END) AS [已接电话],
SUM(CASE WHEN [接听状态]=3 THEN 1 ELSE 0 END) AS [未接电话],
SUM(CASE WHEN [接听状态]=2 THEN 1 ELSE 0 END) AS [回呼电话量]
FROM @TB
GROUP BY 产品代码,YEAR(数据期间)
/*
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---- ----------- ----------- ----------- ----------- -----------
妈咪乐 2007 2 1 0 1
热水瓶 2007 0 0 1 0
妈咪乐 2008 0 0 2 0
热水瓶 2008 2 0 0 2
妈咪乐 2009 4 1 0 3
热水瓶 2009 1 0 0 1
*/
--2
SELECT 产品代码,
CONVERT(VARCHAR(7),数据期间,120) AS 数据期间,
SUM(CASE WHEN [接听状态] IN (0,2) THEN 1 ELSE 0 END) AS [呼入电话量],
SUM(CASE WHEN [接听状态]=0 THEN 1 ELSE 0 END) AS [已接电话],
SUM(CASE WHEN [接听状态]=3 THEN 1 ELSE 0 END) AS [未接电话],
SUM(CASE WHEN [接听状态]=2 THEN 1 ELSE 0 END) AS [回呼电话量]
FROM @TB
GROUP BY 产品代码,CONVERT(VARCHAR(7),数据期间,120)
/*
产品代码 数据期间 呼入电话量 已接电话 未接电话 回呼电话量
---- ------- ----------- ----------- ----------- -----------
妈咪乐 2007-06 2 1 0 1
热水瓶 2007-06 0 0 1 0
妈咪乐 2008-06 0 0 2 0
热水瓶 2008-06 2 0 0 2
妈咪乐 2009-05 1 0 0 1
热水瓶 2009-05 1 0 0 1
妈咪乐 2009-06 3 1 0 2
*/
--modify
select 产品代码,ltrim(year(数据期间))+'年',
呼入电话量=sum(case when 接听状态=0 or 接听状态=2 then 1 else 0 end),
已接电话=sum(case when 接听状态=0 then 1 else 0 end),
未接电话=sum(case when 接听状态=3 then 1 else 0 end),
回呼电话量=sum(case when 接听状态=3 then 1 else 0 end)
from 电话记录表
where 数据期间 between '2007-08-09 10:22:22' and '2009-06-02 10:28:22'
group by 产品代码 ,year(数据期间)
order by 产品代码 ,year(数据期间)
--很简单,给你第一个结果,其他的类似。
select 产品代码,year(数据期间)+'年',
呼入电话量=sum(case when 接听状态=0 or 接听状态=2 then 1 else 0 end),
已接电话=sum(case when 接听状态=0 then 1 else 0 end),
未接电话=sum(case when 接听状态=3 then 1 else 0 end),
回呼电话量=sum(case when 接听状态=3 then 1 else 0 end)
from 电话记录表
where 数据期间 between '2007-08-09 10:22:22' and '2009-06-02 10:28:22'
group by 产品代码 ,year(数据期间)
order by 产品代码 ,year(数据期间)