将列与子查询匹配并将查询作为列返回?

时间:2014-06-11 01:51:15

标签: sql ms-access

所以现在写我的数据库中有两种类型的数据表“预测”数据和“实际”数据这些行的所有字段都是相同的,除了“类型”字段指示数据是否是“预测” “或实际和数量字段。

我需要做的是通过除以匹配的行数量字段来确定预测的准确性。 Ť

所以我会有这个

表格订单

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%

因此,子查询/查询需要与预测匹配,然后将分割数量作为新列返回。

3 个答案:

答案 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查询。如果这对您有用,请告诉我。

因此,您的实际列名与您提供的名称不同。下面给出了基于这些列名称的查询。

enter image description here

创建一个名为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];