我在SQL
中有以下查询 SELECT
ISNULL(Status,'Grand Total') as Status,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 30) AND GETDATE() THEN 1 END) AS b1,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 60) AND (GETDATE() - 30) THEN 1 END) AS b2,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 90) AND (GETDATE() - 60) THEN 1 END) AS b3
FROM PRPC7.prpcdata.DLL_index_ContractMgtWork
WHERE CaseType = 'Amortization Schedule DE'
GROUP BY Status WITH ROLLUP
查询执行以下结果:
Status b1 b2 b3
------------------------------
Open-LetterReview 1 7 11
Open-RequestAMO 4 3 4
Pending-ExceptionWB 0 2 10
Resolved-Success 7 1 0
Resolved-Withdrawn 0 0 0
Grand Total 12 13 25
我希望在总数上达到b1,b2,b3的%:
Status b1 b2 b3 %b1 %b2 %b3
--------------------------------------------------------
Open-LetterReview 1 7 11 8,3% 53,8% 44%
Open-RequestAMO 4 3 4 33,3%
Pending-ExceptionWB 0 2 10 0%
Resolved-Success 7 1 0 58,3%
Resolved-Withdrawn 0 0 0 0%
Grand Total 12 13 25 100%
提前致谢〜
根据这篇文章的解决方案How to calculate percentage with a SQL statement似乎对我不起作用。我认为它与我使用“case when”的事实有关,如果我按照这个答案我的查询应该是这样的:
SELECT
ISNULL(Status,'Grand Total') as Status,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 30) AND GETDATE() THEN 1 END) AS b1,
(COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 30) AND GETDATE() THEN 1 END) * 100 / (Select count(*) From PRPC7.prpcdata.DLL_index_ContractMgtWork)) as pct,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 60) AND (GETDATE() - 30) THEN 1 END) AS b2,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 90) AND (GETDATE() - 60) THEN 1 END) AS b3
FROM PRPC7.prpcdata.DLL_index_ContractMgtWork
WHERE CaseType = 'Amortization Schedule DE'
GROUP BY Status WITH ROLLUP
Status b1 pct b2 b3
----------------------------------
Open-LetterReview 1 0 7 11
Open-RequestAMO 4 0 3 4
Pending-ExceptionWB 0 0 2 10
Resolved-Success 7 0 1 0
Resolved-Withdrawn 0 0 0 0
Grand Total 12 0 13 25
答案 0 :(得分:0)
这样的东西可能会给你输出,
WITH MY_DATA AS (
SELECT
ISNULL(Status,'Grand Total') as Status,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 30) AND GETDATE() THEN 1 END) AS b1,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 60) AND (GETDATE() - 30) THEN 1 END) AS b2,
COUNT(CASE WHEN pxCreateDateTime BETWEEN (GETDATE() - 90) AND (GETDATE() - 60) THEN 1 END) AS b3
FROM PRPC7.prpcdata.DLL_index_ContractMgtWork
WHERE CaseType = 'Amortization Schedule DE'
GROUP BY Status WITH ROLLUP
)
SELECT Status, b1,
b1 / (select b1 from MY_DATA where status = 'Grand Total'),
b2 / (select b2 from MY_DATA where status = 'Grand Total'),
b3 / (select b3 from MY_DATA where status = 'Grand Total')
FROM MY_DATA