我正在开发一个Access数据库,该数据库保存到达仓库并从仓库发货的所有不同批次的记录。仓库中的位置由Lot_ID表示 该表包含以下数据:
Batch_ID | Lot_ID |Arrival_date | Shipping_date
------------------------------------------------------
1 | 1 | 2013/7/08 | 2013/8/21
2 | 2 | 2013/7/10 |
3 | 3 | 2013/7/15 | 2013/8/28
4 | 1 | 2013/7/22 | 2013/8/23
5 | 3 | 2013/8/12 |
我正在尝试编写一个只显示当前未被占用的Lot_ID的查询。
问题出现是因为该表包含当前和历史数据。我的想法是按Lot_ID对表进行分组,并仅选择组中每行的Shipping_date不为空的那些组(这意味着批次中存储的每个批次已经发货,目前批次是免费的)
结果将是:
Batch_ID
---------
1
那么在这种情况下使用什么SQL查询会更好?
答案 0 :(得分:0)
您应该查看以下链接 http://www.w3schools.com/sql/sql_where.asp
应该使用caluse,例如'where shipping = null'
答案 1 :(得分:0)
选择发货日期不为空且批次ID没有空的发货日期的所有批次ID。
内部查询将为您提供尚未发货的所有批次,这意味着它们不是免费的。
SELECT DISTINCT LOT_ID
FROM tableName
WHERE Shipping_date IS NOT NULL
AND LOT_ID NOT IN (SELECT DISTINCT LOT_ID
FROM tableName
WHERE Shipping_date IS NULL)
即使选择没有空的发货日期的所有批次ID也应该有效
SELECT DISTINCT LOT_ID
FROM tableName
WHERE LOT_ID NOT IN (SELECT DISTINCT LOT_ID
FROM tableName
WHERE Shipping_date IS NULL)
答案 2 :(得分:0)
尝试
SELECT Lot_ID
FROM Table1
GROUP BY Lot_ID
HAVING SUM(IIF(Shipping_date IS NULL, 1, 0)) = 0
输出:
|Lot_ID | |-------| | 1 |