【发布时间】:2022-01-26 21:50:54
【问题描述】:
我有一个存储过程:
ALTER PROCEDURE GetReportData
AS
BEGIN
SELECT
LOC.SubCompanyNameVN,
LOC.BranchName,
COUNT(LOC.BranchCode) as Total,
----------- Not Processed Yet
-- Count
(SELECT COUNT(WS.ID)
FROM DBO.WorkingSession AS WS
JOIN DBO.Location AS LO ON WS.LocationID = LO.LocationID AND WS.BranchCode = LO.BranchCode
WHERE WS.Status = 5 OR WS.Status = 6 AND LO.BranchCode = LOC.BranchCode) AS CountNotProcessedYet,
------------
----------- Processing
-- Count
(SELECT COUNT(WS.ID)
FROM DBO.WorkingSession AS WS
JOIN DBO.Location AS LO ON WS.LocationID = LO.LocationID AND WS.BranchCode = LO.BranchCode
WHERE WS.Status = 3 AND LO.BranchName = LOC.BranchName) AS CountProcessing,
------------
FROM DBO.WorkingSession AS SS
JOIN DBO.Location AS LOC ON SS.LocationID = LOC.LocationID AND SS.BranchCode = LOC.BranchCode
JOIN DBO.Status AS ST ON SS.Status = ST.ID
GROUP BY LOC.SubCompanyNameVN, LOC.BranchName, LOC.BranchCode
ORDER BY LOC.SubCompanyNameVN
END
结果:
| SubCompanyNameVN | BranchName | Total | CountNotProcessedYet | CountProcessing |
|---|---|---|---|---|
| Vùng 1 | HNI_01 | 5 | 3 | 2 |
| Vùng 1 | HNI_02 | 15 | 5 | 10 |
| Vùng 1 | HNI_07 | 12 | 6 | 6 |
但我的预期结果是:
| SubCompanyNameVN | BranchName | Total | CountNotProcessedYet | percentNotProcessedYet | CountProcessing | percentProcessing |
|---|---|---|---|---|---|---|
| Vùng 1 | HNI_01 | 5 | 3 | 60% | 2 | 40% |
| Vùng 1 | HNI_02 | 15 | 5 | 33.33% | 10 | 66.67% |
| Vùng 1 | HNI_07 | 12 | 6 | 50% | 6 | 50% |
所以我像这样更新我的存储过程:
ALTER PROCEDURE GetReportData
AS
BEGIN
SELECT
LOC.SubCompanyNameVN,
LOC.BranchName,
COUNT(LOC.BranchCode) as Total,
----------- Not Processed Yet
-- Count
(SELECT COUNT(WS.ID)
FROM DBO.WorkingSession AS WS
JOIN DBO.Location AS LO ON WS.LocationID = LO.LocationID AND WS.BranchCode = LO.BranchCode
WHERE WS.Status = 5 OR WS.Status = 6 AND LO.BranchCode = LOC.BranchCode) AS CountNotProcessedYet,
--- Percent
ROUND((CountNotProcessedYet/Total)*100,2)
------------
----------- Processing
-- Count
(SELECT COUNT(WS.ID)
FROM DBO.WorkingSession AS WS
JOIN DBO.Location AS LO ON WS.LocationID = LO.LocationID AND WS.BranchCode = LO.BranchCode
WHERE WS.Status = 3 AND LO.BranchName = LOC.BranchName) AS CountProcessing,
--- Percent
ROUND((CountProcessing/Total)*100,2)
------------
FROM DBO.WorkingSession AS SS
JOIN DBO.Location AS LOC ON SS.LocationID = LOC.LocationID AND SS.BranchCode = LOC.BranchCode
JOIN DBO.Status AS ST ON SS.Status = ST.ID
GROUP BY LOC.SubCompanyNameVN, LOC.BranchName, LOC.BranchCode
ORDER BY LOC.SubCompanyNameVN
END
错误:
有什么方法可以计算百分比吗?
【问题讨论】:
标签: sql sql-server tsql stored-procedures percentage