假设我有2个表,一个存储项目信息,第二个用于跟踪链接到所述项目的各种数量。
我的商品有订单号,身份证号码和批号。第二表I中感兴趣的数量是"数量准备好" (我有多少库存),"订购数量" (已订购了多少客户)和#34;已发货数量" (我已经发了多少)。两个表都有更多数据,但我不需要它来进行此查询。
我想要的是:一个查询将向我返回所有包含多个批号的商品的订单号(因此,如果商品只有一个不同的批号,我不希望它在结果中),我已经有一些(所以qty_ready> 0)并且我发运了一些,但不是我的所有订单(所以qty_shipped< qty_ordered)。
示例:
表项目:
+-------+--------+------------------+
| IdNum | LotNum | Someothercolumns |
+-------+--------+------------------+
| 1 | 10-00 | 123 |
| 2 | 10-01 | 123 |
| 2 | 10-02 | 123 |
| 3 | 10-03 | 123 |
| 3 | 10-04 | 123 |
+-------+--------+------------------+
表项目数量:
+----------+---------+-----------+-------------+-------------+-----+
| orderNum | idNum | qty_ready | qty_ordered | qty_shipped |other|
+----------+---------+-----------+-------------+-------------+-----+
| O1 | 1 | 10 | 5 | 3 | 123 |
| O2 | 2 | 10 | 10 | 10 | 123 |
| O3 | 2 | 10 | 5 | 3 | 123 |
| O4 | 3 | 0 | 10 | 5 | 123 |
| O5 | 3 | 0 | 5 | 5 | 123 |
+----------+---------+-----------+-------------+-------------+-----+
这里我只想要O3
并返回它的数据,因为:
O1
- 商品1
只有一个lot
与之关联O2
- 商品2
有多个lot
,但订单已经完成
(订购10件,送10件)O4
- 项3
有多个,但是
qty_ready
不是> 0 O5
- 项3
有多个,但是
qty_ready
不是> 0已经完成(5个订购,5个
发送)这是我对查询的尝试 - 尽管它返回数据,但它确实返回了许多重复的行(如果一个项目有4个批次,我会得到每个结果4次,所以16行)。我怀疑我的加入是问题,但我似乎无法找到它:
;with noo as (select count(LotNum) over(partition by LotNum) as temp, Item.*
from Item
inner join ItemQty on ItemQty.idNum = Item.idNum
where Item.idNum in
(select t1.idNum
from Item t1
inner join Item t2 on t1.idNum = t2.idNum
where t1.LotNum <> t2.lotNum) and qty_shipped < qty_ordered and qty_ready > 0)
select * from noo where temp > 1
order by idNum desc
答案 0 :(得分:1)
select * from itemqty
where idnum in
(select idnum from item group by idnum having count(*) > 1)
and qty_ready > 0
and qty_ordered > qty_shipped
and qty_shipped > 0