繁体   English   中英

如何获得每天2列总计数的百分比?

[英]How to get percentage of 2 column total counts per day?

我有以下查询:

SELECT ACCT_OT, 

COUNT(CASE WHEN BR_CD like '%0%' THEN 1 ELSE NULL END) AS new,

COUNT(CASE WHEN BR_CD like '%1%' THEN 1 ELSE NULL END) AS old,

FROM MSTR_TBL where ACCT_OT between '2017-10-23' and '2017-10-25'

GROUP BY ACCT_OT;

我希望能够在同一查询上添加另一列,该列显示旧/新百分比。 例如,在10/23上,新值为10,旧值为1,则第三列将为10%。 希望你们能有所帮助。

也许使用通用表表达式。 像这样:

WITH CTE AS (SELECT ACCT_OT, 

    COUNT(CASE WHEN BR_CD like '%0%' THEN 1 ELSE NULL END) AS new,

    COUNT(CASE WHEN BR_CD like '%1%' THEN 1 ELSE NULL END) AS old,

    FROM MSTR_TBL where ACCT_OT between '2017-10-23' and '2017-10-25'

    GROUP BY ACCT_OT;
)
SELECT ACCT_OT, new, old, ((old/new) * 100) AS per FROM CTE;

我不确定这是否可行,因为我无法对其进行测试,但是您可以尝试。

SELECT ACCT_OT, COUNT(CASE WHEN BR_CD like '%0%' THEN 1 ELSE NULL END) AS new, COUNT(CASE WHEN BR_CD like '%1%' THEN 1 ELSE NULL END) AS old, CONVERT(VARCHSR(50), COUNT(CASE WHEN BR_CD like '%1%' THEN 1 ELSE NULL END) * 100 / COUNT(CASE WHEN BR_CD like '%0%' THEN 1 ELSE NULL END))+'% ' as percentage FROM MSTR_TBL where ACCT_OT between '2017-10-23' and '2017-10-25' GROUP BY ACCT_OT;

你可以这样做

WITH v_mstr_tbl
AS
(SELECT  ACCT_OT, 
        COUNT(CASE WHEN BR_CD like '%0%' THEN 1 ELSE NULL END) AS new,
        COUNT(CASE WHEN BR_CD like '%1%' THEN 1 ELSE NULL END) AS old
 FROM   MSTR_TBL where ACCT_OT between '2017-10-23' and '2017-10-25'
 GROUP BY ACCT_OT
 )
 SELECT ACCT_OT, new, old, (new/old) * 100 AS percent
   FROM v_mstr_tbl;

我将使用sum()而不是count()来编写您的查询:

SELECT ACCT_OT, 
       SUM(CASE WHEN BR_CD like '%0%' THEN 1 ELSE 0 END) AS new,
       SUM(CASE WHEN BR_CD like '%1%' THEN 1 ELSE 0 END) AS old
FROM MSTR_TBL 
WHERE ACCT_OT BETWEEN '2017-10-23' ND '2017-10-25'
GROUP BY ACCT_OT;

如果您希望使用该百分比的数据 ,我会这样做:

SELECT ACCT_OT, 
       SUM(CASE WHEN BR_CD like '%0%' THEN 1 ELSE 0 END) AS new,
       SUM(CASE WHEN BR_CD like '%1%' THEN 1 ELSE 0 END) AS old,
       AVG(CASE WHEN BR_CD like '%1%' THEN 1.0 ELSE 0 END) AS old
FROM MSTR_TBL 
WHERE ACCT_OT BETWEEN '2017-10-23' ND '2017-10-25'
GROUP BY ACCT_OT;

但是,该比率需要重复以下表达式:

SELECT ACCT_OT, 
       SUM(CASE WHEN BR_CD like '%0%' THEN 1 ELSE 0 END) AS new,
       SUM(CASE WHEN BR_CD like '%1%' THEN 1 ELSE 0 END) AS old,
       (SUM(CASE WHEN BR_CD like '%1%' THEN 1 ELSE 0 END) /
        SUM(CASE WHEN BR_CD like '%0%' THEN 1 END)
       ) as ratio

我删除了else 0以避免被零除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM