所以现在写我的数据库中有两种类型的数据表“预测”数据和“实际”数据这些行的所有字段都是相同的,除了“类型”字段指示数据是否是“预测” “或实际和数量字段。
我需要做的是通过除以匹配的行数量字段来确定预测的准确性。 Ť
所以我会有这个
表格订单
Order No. Delivery Date Quantity(cases) Type
1234 6/20/2014 100 Forecast
1234 6/20/2014 70 Actual
然后执行一个返回精确度的查询,如...
SELECT Order No., Deliverydate FROM orders WHERE Order No. = "1234" then (SubQuery) As Accuracy
查询结果
Order No. Delivery Date Accuracy
1234 6/20/2014 70%
因此,子查询/查询需要与预测匹配,然后将分割数量作为新列返回。
答案 0 :(得分:2)
这可能是事后......
使用原始问题中的字段名称:
Select f.orderNo
, f.deliveryDate
, format(a.quantity/f.quantity, 'Percent') as accuracy
From (Select * from tbl_Orders where type='forecast') f
Inner Join (Select * from tbl_Orders where type='actual') a on f.orderNo = a.orderNo
这是在MS Access 2010中完成的
答案 1 :(得分:0)
我查询了SQL服务器。如果它适用于MS Access,请告诉我 -
select orderno, deliverydate, Forecast, [Order],
convert(decimal(5,2), ([Order]*100.0) / Forecast) as Accuracy
from
(
select orderno, deliverydate, quantity, [type]
from Orders
) as src
pivot(
max(quantity)
for [type] in ([Forecast],[Order])
)as pvt
对于MS Access(我到目前为止) -
我从未使用过MS Access 。但是,我尝试使用此处给出的示例 - TRANSFORM and PIVOT in Access 2013 SQL来创建MS Access查询。如果这对您有用,请告诉我。
因此,您的实际列名与您提供的名称不同。下面给出了基于这些列名称的查询。
创建一个名为queryPivot -
的查询TRANSFORM Max(Quantity)
SELECT UPC, RDDto
FROM order_signals
GROUP BY UPC, RDDto
PIVOT [Type];
创建另一个名为querySelectFromPivot -
的查询SELECT queryPivot.UPC, queryPivot.RDDto,
(queryPivot.Actual * 100.0/ queryPivot.Forecast) as 'Accuracy'
FROM queryPivot;
这是我被困的地方。由于样本数据中缺少值,它给出了空白值。我尝试选择实际* 100.0,但这不会给我 任何小数值。因此,尝试找出如何将列转换为十进制形式。之后,此查询应该有效。 (男人......访问对于sql人来说是如此不直观。)
答案 2 :(得分:0)
首先,我做了一个Join Called Central Query,然后使用该查询创建了一个查询。
首先我创建两个查询,一个用于预测(测试),一个用于命令(连接测试)
所以我加入了交付日期(RDD),客户和UPC上的两个查询,并且来自"中央查询"
然后我从中心准确度中获取数量并将它们除以这里是代码。
第1部分(还有另一个只获得信号(预测)的查询
SELECT Customer, RDD, UPC, Shipto, Quantity, Type
FROM order_signals
WHERE Type = 'Order' AND RDD < NOW();
使用两个查询来创建&#34;中央查询&#34;
SELECT test.Customer, [Join-test].Customer, test.Quantity, [Join-test].Quantity, [Join-test].UPC, [Join-test].UPC, [Join-test].RDD
FROM test INNER JOIN [Join-test] ON (test.RDD = [Join-test].RDD) AND (test.Customer = [Join-test].Customer) AND (test.UPC = [Join-test].UPC);
然后我使用查询中心的列,我很好!
SELECT [Central Query].[Join-test].Customer, [Central Query].UPC, [Central Query].test.Quantity, [Central Query].[Join-test].Quantity, Format(1-Abs(([Central Query].[Join-test].Quantity-[Central Query].test.Quantity)/[Central Query].test.Quantity),"Percent") AS Accuracy, [Central Query].RDD
FROM [Central Query];