簡體   English   中英

按功能除以總計

[英]Divide by Total in Group By Function

我想在下面的代碼中為每一列添加總計的百分比,但由於SELECT語句已被Group By過濾,所以我無法理解

SELECT CCK_DIALEDTHEME AS 'Theme',
       COUNT(TA_TASKID) AS 'Total Calls Incoming',
       COUNT(CASE WHEN TM_SPEECH > 0 THEN TA_TASKID END) AS 'Total Answered Calls',
       COUNT(CASE WHEN TM_SPEECH = 0 THEN TA_TASKID END) AS 'Total Lost Calls'
  FROM [BSIT_ERA_RAW_DATA].[dbo].[IPOCC_LEVELONEDATA]
  WHERE TA_TIMESTAMP >= dateadd(day,-1, cast(getdate() as date)) AND TA_TIMESTAMP <= dateadd(day,0, cast(getdate() as date))
        AND CCK_ROUTEDTHEME LIKE '%_T'
        AND TA_CONNECTIONSTATE LIKE '%QUEUE%'
  GROUP BY CCK_DIALEDTHEME

UNION ALL

SELECT 'Total' AS 'Theme',
       COUNT(TA_TASKID) AS 'Total Calls Incoming',
       COUNT(CASE WHEN TM_SPEECH > 0 THEN TA_TASKID END) AS 'Total Answered Calls',
       COUNT(CASE WHEN TM_SPEECH = 0 THEN TA_TASKID END) AS 'Total Lost Calls'
  FROM [BSIT_ERA_RAW_DATA].[dbo].[IPOCC_LEVELONEDATA]
  WHERE TA_TIMESTAMP >= dateadd(day,-1, cast(getdate() as date)) AND TA_TIMESTAMP <= dateadd(day,0, cast(getdate() as date))
        AND CCK_ROUTEDTHEME LIKE '%_T'
        AND TA_CONNECTIONSTATE LIKE '%QUEUE%'

結果如下:

  Theme             Total Calls Incoming    Total Answered Calls    Total Lost Calls
  Adelaide_T        109                     103                     6 
  Brisbane_T        591                     573                     18 
  Canberra_T        10                      9                       1
  CentralCoast_T    46                      45                      1 
  Geelong_T         2                       2                       0 
  Melbourne_T       621                     588                     33
  MELNight_T        7                       0                       7 
  Sydney_T          598                     585                     13 
  SYDNight_T        3                       0                       3 
  Tasmania_T        1                       0                       1
  Woollongong_T     1                       1                       0   
  Total             1989                    1906                    83

我想要這樣的東西:

     Theme              Total Calls Incoming  VS Total%     Total Answered Calls  VS Total%   Total Lost Calls  VS Total%
     Adelaide_T         109                   5.48%         103                   5.40%       6                 7.23%

干杯

sum() over ()上使用sum() over ()來查找總計。 然后計算每行的百分比。 myTable應該替換為您的查詢

select
    Theme, [Total Calls Incoming]
    , [VS Total%] = cast(cast(100.0 *[Total Calls Incoming] / sum([Total Calls Incoming]) over () as decimal(20, 2)) as varchar(25)) + '%'
    , [Total Answered Calls]
    , [VS Total%] = cast(cast(100.0 *[Total Answered Calls] / sum([Total Answered Calls]) over () as decimal(20, 2)) as varchar(25)) + '%'
    , [Total Lost Calls]
    , [VS Total%] = cast(cast(100.0 *[Total Lost Calls] / sum([Total Lost Calls]) over () as decimal(20, 2)) as varchar(25)) + '%'
from
    myTable

這是查詢的外觀:

SELECT
    Theme, [Total Calls Incoming]
    , [VS Total%] = cast(cast(100.0 *[Total Calls Incoming] / (sum([Total Calls Incoming]) over () / 2) as decimal(20, 2)) as varchar(25)) + '%'
    , [Total Answered Calls]
    , [VS Total%] = cast(cast(100.0 *[Total Answered Calls] / (sum([Total Answered Calls]) over () / 2) as decimal(20, 2)) as varchar(25)) + '%'
    , [Total Lost Calls]
    , [VS Total%] = cast(cast(100.0 *[Total Lost Calls] / (sum([Total Lost Calls]) over () / 2) as decimal(20, 2)) as varchar(25)) + '%'
FROM (
    SELECT
        ISNULL(CCK_DIALEDTHEME, 'Total') AS 'Theme',
        COUNT(TA_TASKID) AS 'Total Calls Incoming',
        COUNT(CASE WHEN TM_SPEECH > 0 THEN TA_TASKID END) AS 'Total Answered Calls',
        COUNT(CASE WHEN TM_SPEECH = 0 THEN TA_TASKID END) AS 'Total Lost Calls'
    FROM 
        [BSIT_ERA_RAW_DATA].[dbo].[IPOCC_LEVELONEDATA]
    WHERE 
        TA_TIMESTAMP >= dateadd(day,-1, cast(getdate() as date)) AND TA_TIMESTAMP <= dateadd(day,0, cast(getdate() as date))
        AND CCK_ROUTEDTHEME LIKE '%_T'
        AND TA_CONNECTIONSTATE LIKE '%QUEUE%'
    GROUP BY GROUPING SETS (CCK_DIALEDTHEME, ())
) T

我將代碼修改為可以對總價值進行子查詢,以計算出每個主題占總價值的百分比,下面是示例之一:

SELECT CCK_DIALEDTHEME AS 'Theme',
       COUNT(TA_TASKID) AS 'Total Calls Incoming',
       STR(((100.00* 
       (COUNT(TA_TASKID))) 
       / 
       (SELECT COUNT(TA_TASKID) 
         FROM [BSIT_ERA_RAW_DATA].[dbo].[IPOCC_LEVELONEDATA]
         WHERE TA_TIMESTAMP >= dateadd(day,-1, cast(getdate() as date)) AND TA_TIMESTAMP <= dateadd(day,0, cast(getdate() as date))
         AND CCK_ROUTEDTHEME LIKE '%_T'
         AND TA_CONNECTIONSTATE LIKE '%QUEUE%')),5,2) AS '% Total'

結果將包含“%總計”列:

Theme           Total Calls Incoming    % Total
Adelaide_T      109                     5.48
Brisbane_T      591                     29.71
Canberra_T      10                      0.50
CentralCoast_T  46                      2.31
Geelong_T       2                       0.10
Melbourne_T     621                     31.22
MELNight_T      7                       0.35
Sydney_T        598                     30.07
SYDNight_T      3                       0.15
Tasmania_T      1                       0.05
Woollongong_T   1                       0.05

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM