我有两个表。
我需要从当前数量中减去订购的商品数量 记录。
我可以像这样得到每个单独项目的销售额的 count()
:
SELECT SALES.PRODUCT_ID AS ORDERED_ID
,COUNT(SALES.PRODUCT_ID) AS ORDERED
FROM SALES
GROUP BY SALES.PRODUCT_ID
这给了我:
ORDERED_ID ORDERED
1201 2
1202 2
1204 2
1205 3
1206 1
1207 2
1208 1
1209 1
1210 3
获取数量只是一个问题
SELECT PRODUCT.PRODUCT_ID AS INVEN_ID
,PRODUCT.QUANTITY AS INVEN
FROM PRODUCT
这给了我:
INVEN_ID INVEN
1199 5
1200 2
1201 33
1202 44
1203 55
1204 66
1205 77
1206 88
1207 99
1208 110
1209 121
1210 132
我在这个问题上花了几个小时,但放弃了我认为应该是解决方案的方法:
SELECT SUB1.INVEN - SUB2.ORDERED
FROM
(SELECT PRODUCT.PRODUCT_ID AS INVEN_ID
,PRODUCT.QUANTITY AS INVEN
FROM PRODUCT
)AS SUB1
,(SELECT SALES.PRODUCT_ID AS ORDERED_ID
,COUNT(SALES.PRODUCT_ID) AS ORDERED
FROM SALES
GROUP BY SALES.PRODUCT_ID
)AS SUB2
INNER JOIN SUB1 ON SUB1.INVEN_ID = SUB2.ORDERED_ID
但是,access 不会将最后一个连接识别为有效连接,如果没有它,我只会得到笛卡尔积。如果我尝试在没有子查询的情况下检索 quantity
并且只是尝试 SELECT product.quantity - SUB2.ORDERED
Access 请求,我将 product.quantity - SUB2。 ORDERED
在聚合函数中。当我按照它说的去做时,它会告诉我 product.quantity - SUB2.ORDERED
不能在聚合函数中。我很茫然。
编辑:
Final Solution:
SELECT SUB1.INVEN_ID AS PRODUCT_ID
,SUB1.PRODUCT_NAME AS PRODUCT_NAME
,SUB1.PRICE AS PRICE
,SUB1.INVEN - NZ(SUB2.ORDERED,0) AS AVAILABLE
FROM
(SELECT PRODUCT.PRODUCT_ID AS INVEN_ID
,PRODUCT.PRODUCT_NAME AS PRODUCT_NAME
,PRODUCT.PRICE AS PRICE
,PRODUCT.QUANTITY AS INVEN
FROM PRODUCT
)AS SUB1
LEFT JOIN
(SELECT SALES.PRODUCT_ID AS ORDERED_ID
,COUNT(SALES.PRODUCT_ID) AS ORDERED
FROM SALES
GROUP BY SALES.PRODUCT_ID
)AS SUB2 ON SUB1.INVEN_ID = SUB2.ORDERED_ID
最佳答案
您的 INNER JOIN
应该放在第一个子查询之后。
我认为您正在寻找 LEFT JOIN
,因为 PRODUCT
表应该是主表。
如果你使用 LEFT JOIN
SUB2.ORDERED
列可能是 NULL 所以使用 NZ
函数
或 IIF(ISNULL(SUB2.ORDERED),0,SUB2.ORDERED)
进行检查。
你可以试试这个。
SELECT SUB1.INVEN - NZ(SUB2.ORDERED,0)
FROM
(SELECT PRODUCT.PRODUCT_ID AS INVEN_ID
,PRODUCT.QUANTITY AS INVEN
FROM PRODUCT
)AS SUB1
LEFT JOIN
(SELECT SALES.PRODUCT_ID AS ORDERED_ID
,COUNT(SALES.PRODUCT_ID) AS ORDERED
FROM SALES
GROUP BY SALES.PRODUCT_ID
)AS SUB2 ON SUB1.INVEN_ID = SUB2.ORDERED_ID
关于sql - Access 交叉表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50149144/