![](/img/trans.png)
[英]How to sum running total for Quantity column per item and get only the day which the stock became Zero in the total
[英]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.