我有一个名为Call_Data的表,数据如下:
Arr_Date Interval AN_Time AB_Time
08/08/2011 1600 113 NULL
08/08/2011 1400 317 NULL
08/09/2011 1200 298 NULL
08/09/2011 1000 NULL 194
08/10/2011 1200 256 NULL
08/10/2011 1400 NULL 132我希望得到如下输出:
Arr_Date Total_calls AN_10_min AN_5_min AB_10_Min AB_5_min
08/08/2011 2 2 1 0 0
08/09/2011 2 1 1 1 1
08/10/2011 2 1 1 1 1逻辑是列AN_Time,AB_Time是以秒为单位。我想计算每列每天在10分钟和5分钟范围内的呼叫数。
我写了这样的东西:
SELECT ARR_date,
CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END AS AN_5_min ,
case WHEN AN_TIME <600 THEN 1 ELSE 0 END AS AN_10_min,
CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END AS AB_5_min ,
case WHEN AB_TIME <600 THEN 1 ELSE 0 END AS AB_10_min
FROM Call_Data
GROUP BY AR_Date,AN_TIME,AB_TIME但这并不能告诉我调用的总数。有谁可以帮我?
发布于 2011-09-01 06:00:32
你很接近了:
SELECT
ARR_date,
COUNT(*) AS Total_calls,
SUM( CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END ) AS AN_5_min ,
SUM( CASE WHEN AN_TIME <600 THEN 1 ELSE 0 END ) AS AN_10_min,
SUM( CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END ) AS AB_5_min ,
SUM( CASE WHEN AB_TIME <600 THEN 1 ELSE 0 END ) AS AB_10_min
FROM Call_Data
GROUP BY AR_Date您还可以使用NULL和COUNT来(向任何未来的程序员)显示您实际上是在计算调用次数,而不是求和:
SELECT
ARR_date,
COUNT(*) AS Total_calls,
COUNT( CASE WHEN AN_TIME <300 THEN 1 ELSE NULL END ) AS AN_5_min ,
COUNT( CASE WHEN AN_TIME <600 THEN 1 ELSE NULL END ) AS AN_10_min,
COUNT( CASE WHEN AB_TIME <300 THEN 1 ELSE NULL END ) AS AB_5_min ,
COUNT( CASE WHEN AB_TIME <600 THEN 1 ELSE NULL END ) AS AB_10_min
FROM Call_Data
GROUP BY AR_Date发布于 2011-09-01 06:02:03
你就快到了,只要把这些列加起来就行了。
SELECT
ARR_date,
SUM(AN_5_min) AN_5_min,
SUM(AN_10_min) AN_10_min,
SUM(AB_5_min) AB_5_min,
SUM(AB_10_min) AB_10_min
FROM
(SELECT
ARR_date,
CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END AS AN_5_min,
case WHEN AN_TIME <600 THEN 1 ELSE 0 END AS AN_10_min,
CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END AS AB_5_min,
case WHEN AB_TIME <600 THEN 1 ELSE 0 END AS AB_10_min
FROM
Call_Data) TBL
GROUP BY
ARR_date发布于 2011-09-01 06:05:00
SELECT Arr_Date, COUNT(*) AS Total_Calls,
SUM(CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END) AS AN_5_min ,
SUM(case WHEN AN_TIME <600 THEN 1 ELSE 0 END) AS AN_10_min,
SUM(CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END) AS AB_5_min ,
SUM(case WHEN AB_TIME <600 THEN 1 ELSE 0 END) AS AB_10_min
FROM dbo.Call_Data
GROUP BY Arr_Date
ORDER BY Arr_Date;https://stackoverflow.com/questions/7263965
复制相似问题