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