【发布时间】:2023-03-22 07:47:01
【问题描述】:
我在 SQL Server 中有一个问题,我不知道如何解决。从下面的查询和输出中,我需要生成以下指标:尺寸级别的 ATP(可承诺)以百分比表示,即:
有 3 种尺寸,2 种有数量 - 1 种没有。如果有任何数量,那么如果不是“0”,我想返回值“1”(CASE 语句)
留下 2 的值为 '1' 和 1 的值为 '0' (2/3) 或 66% 'Full Size ATP'
如何使用下面的查询生成该计算?我在CASE 语句上尝试了COUNT,但没有成功。
感谢您的帮助。
查询:
SELECT A.MATERIAL,
M.SIZE_LITERAL,
DATEPART(mm,AVAIL_DATE) AS 'MONTH',
CASE
WHEN A.AVAIL_QTY IS NULL
THEN '0'
ELSE A.AVAIL_QTY
END AS 'AVAIL_QTY',
COUNT(AVAIL_QTY) AS 'COUNT_ATP_QTY',
COUNT(AVAIL_QTY)/COUNT(*) AS 'ATP %'
FROM VW_MM_SALES_GRID M LEFT OUTER JOIN VW_ATP_DOWNLOAD_NOREQCAT A
ON A.MATERIAL = M.MATERIAL
AND A.SIZE_LITERAL = M.SIZE_LITERAL
AND A.STOCK_CATEGORY IN ('A60381000','A60382000')
AND A.AVAIL_DATE BETWEEN GETDATE() AND GETDATE() + 90
WHERE M.MATERIAL = 'AA2721' AND M.ACTIVE_FLAG IS NOT NULL
GROUP BY A.MATERIAL,
M.SIZE_LITERAL,
AVAIL_DATE,
A.AVAIL_QTY,
A.STOCK_CATEGORY
SELECT @@ROWCOUNT
结果:
MATERIAL SIZE_LITERAL MONTH AVAIL_QTY COUNT_ATP_QTY ATP %
------------------ ------------ ----------- --------------------------------------- ------------- -----------
NULL S NULL 0 0 0
AA2721 L 8 45 1 1
AA2721 M 8 51 1 1
Warning: Null value is eliminated by an aggregate or other SET operation.
(3 row(s) affected)
-----------
3
(1 row(s) affected)
【问题讨论】:
标签: sql sql-server count rowcount