0

我正在研究一个 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 不为空的组(这意味着存储在 Lot 中的每个 Batch 已经发货并且当前 Lot 是免费的)

所以结果是:

Batch_ID  
--------- 
1     

那么在这种情况下使用什么 sql 查询会更好呢?

4

3 回答 3

0

尝试

SELECT Lot_ID
  FROM Table1
 GROUP BY Lot_ID
HAVING SUM(IIF(Shipping_date IS NULL, 1, 0)) = 0

输出:

|Lot_ID |
|-------|
| 1 |
于 2013-09-05T04:23:58.793 回答
0

你应该检查以下链接 http://www.w3schools.com/sql/sql_where.asp

应该使用 where caluse like 'where shipping_date = null'

于 2013-09-05T04:16:07.973 回答
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)
于 2013-09-05T04:16:17.077 回答