我有以下查询:
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,new是10,old是1,那么第三列将是10%。希望你们能帮忙。
答案 0 :(得分:0)
可能使用公用表表达式。像这样:
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;
答案 1 :(得分:0)
我不确定这是否有效,因为我无法测试,但你可以试试。
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;
答案 2 :(得分:0)
你可以这样做
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;
答案 3 :(得分:0)
我会使用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
以避免被零除。