尝试从变量表中返回两行的百分比



我创建了一个变量表,该表返回总采购订单和已完成采购订单的计数。我接下来要做的是获取这两个字段的准时交货百分比。 这是我到目前为止有效的方法,但我不知道如何获得两者的百分比。

DECLARE @percentage TABLE (
col1 VARCHAR (100)

);
INSERT INTO @percentage
SELECT       Count (DISTINCT dbo.PorMasterDetail.PurchaseOrder )
FROM            dbo.PorMasterDetail INNER JOIN
dbo.PorMasterHdr ON dbo.PorMasterDetail.PurchaseOrder = dbo.PorMasterHdr.PurchaseOrder
WHERE           (dbo.PorMasterDetail.PurchaseOrder LIKE '0000000007%') AND (dbo.PorMasterDetail.MLatestDueDate BETWEEN GETDATE()-7 AND GETDATE()) AND (dbo.PorMasterHdr.OrderStatus <> '*')
UNION
SELECT Count (DISTINCT dbo.PorMasterDetail.PurchaseOrder)
FROM            dbo.PorMasterDetail INNER JOIN
dbo.PorMasterHdr ON dbo.PorMasterDetail.PurchaseOrder = dbo.PorMasterHdr.PurchaseOrder
WHERE        (dbo.PorMasterDetail.PurchaseOrder LIKE '0000000007%') AND (dbo.PorMasterDetail.MLatestDueDate BETWEEN GETDATE() - 7 AND GETDATE()) AND (dbo.PorMasterHdr.OrderStatus <> '*') AND LineType IN ('1', '7') AND MCompleteFlag = 'Y'

目前,当我从@percentage中选择*时,我得到结果, Col1 182 244 我现在需要得到这两个数字的百分比,这两个数字每天都会变化。

不确定你在问什么,但希望这会让你了解如何解决

WITH X AS
(
SELECT Col1 = 182 UNION
SELECT Col1 = 244
)
SELECT
Col1
,PctValue = Col1 * 100.00 / (SELECT SUM(Col1) FROM X)
FROM X

感谢大家的建议。 尤利西斯让我最接近,这就是我最终得到的工作。

WITH TotalPosDueLast7 as ( 选择"过去 7 天内到期的采购订单总数"作为标题、计数(不同 dbo.PorMasterDetail.PurchaseOrder ( AS 总计 来自德博。波尔马斯特详细信息 内联接 德博。PorMasterHdr ON dbo.PorMasterDetail.PurchaseOrder = dbo.采购订单 哪里(dbo.PorMasterDetail.PurchaseOrder LIKE '0000000007%'( 和 (dbo.PorMasterDetail.MLatestDueDate BETWEEN GETDATE((-30 和 GETDATE((( 和 (dbo.PorMasterHdr.OrderStatus <> ''( ), 总位置完成为 ( 选择"已完成的采购订单总数"作为标题、计数(不同 dbo.PorMasterDetail.PurchaseOrder(作为总计 来自德博。波尔马斯特详细信息 内联接 德博。PorMasterHdr ON dbo.PorMasterDetail.PurchaseOrder = dbo.采购订单 哪里(dbo.PorMasterDetail.PurchaseOrder LIKE '0000000007%'( 和 (dbo.PorMasterDetail.MLatestDueDate 介于 GETDATE(( - 30 和 GETDATE((( 和 (dbo.PorMasterHdr.OrderStatus <>''( 和 LineType IN ('1', '7'( 和 MCompleteFlag = 'Y' ) ,TotalPosdue (Tile, Totals( as ( 选择"应付总 PO",计数 (dbo.PorMasterDetail.Line(

FROM            dbo.PorMasterDetail INNER JOIN
dbo.PorMasterHdr ON dbo.PorMasterDetail.PurchaseOrder = dbo.PorMasterHdr.PurchaseOrder
WHERE        (dbo.PorMasterDetail.PurchaseOrder LIKE '0000000007%') AND (dbo.PorMasterDetail.MLatestDueDate BETWEEN GETDATE() - 30 AND GETDATE()) AND (dbo.PorMasterHdr.OrderStatus <> '*') AND 
(dbo.PorMasterDetail.LineType IN ('1', '7')) AND MCompleteFlag IN ('Y', ' ')

( 、接收行数(磁贴、总计(为 ( 选择"收到的行数",计数(dbo.PorMasterDetail.Line( 来自德博。波尔马斯特详细信息 内联接 德博。PorMasterHdr ON dbo.PorMasterDetail.PurchaseOrder = dbo.采购订单 哪里(dbo.PorMasterDetail.PurchaseOrder LIKE '0000000007%'( 和 (dbo.PorMasterDetail.MLatestDueDate BETWEEN GETDATE((- 30AND GETDATE((( 和 (dbo.PorMasterHdr.OrderStatus <> ''( 和 (德博.PorMasterDetail.LineType IN ('1', '7'(( 和 MCompleteFlag = 'Y' 而不是 MLastReceiptDat 是空的 ) 、"行打开"(平铺、总计(作为 ( 选择"行打开",计数(dbo。PorMasterDetail.Line( 来自德博。波尔马斯特详细信息 内联接 德博。PorMasterHdr ON dbo.PorMasterDetail.PurchaseOrder = dbo.采购订单 哪里(dbo.PorMasterDetail.PurchaseOrder LIKE '0000000007%'( 和 (dbo.PorMasterDetail.MLatestDueDate BETWEEN GETDATE((-30 和 GETDATE((( 和 (dbo.PorMasterHdr.OrderStatus <> ''( 和行类型输入 ('1', '7'( 和 MLastReceiptDat 为空 ) 从 TotalPosDueLast7 中选择 * 联盟 从"总计位置已完成"中选择 * 联盟 从 TotalPosDue 中选择 * 联盟 从"已接收的行"中选择 * 联盟 从"行打开"中选择 * 联盟 选择"平均"作为标题,ROUND((100.0 * tpc.总计(/(吨/天。总计( , 2( 作为总计 从 TotalPosDone 作为 tpc 交叉加入 TotalPosDueLast7 作为 tpd

最新更新