我需要用我的SQL查询得到3个新列。前2列只需要1个表(Shipment_Info),但第3列需要第2个表(Item_Info)。
1.第1个新列= Shipment_Size(该货件中的商品ID数量)
1.第2个新列= Shipment_ready(整个shipmentID已准备好发运。对于准备好发运的shipmentID,所有项目ID必须处于“已装箱”状态)
1.第3个新列= Item_Stored(此项目是否至少存储了1次)。如果至少存储了1次,则值应为yes,如果从未至少存储过1次,则值应为no。
发货信息表:
Shipment_Info有三列ShipmentID、ItemID和Item_Status。ItemID值始终是唯一的,但ShipmentID会重复,因为不同的项目可以在同一次发运中,并且项目状态可以处于不同的状态(已分配、已装满和已装箱)。
项目信息表:Item_Info有两列。ItemID、Operation、Op_time。ItemID将重复,因为此表显示了对此ItemID发生的不同操作以及关联的时间。
数据库表:装运信息
| 发货ID|项目ID|项目_状态|
| - ------|- ------|- ------|
| 小行星|小行星20001| Package |
| 小行星|二○ ○ ○二年|已分配|
| 小行星|二○ ○ ○三| Package |
| 小行星10003|二○ ○ ○四|已填充|
| 小行星|二○ ○ ○五| Package |
| 小行星|二○ ○ ○六| Package |
| 小行星|小行星2000| Package |
| 小行星10005|二○ ○ ○八|已填充|
| 小行星10005|小行星2000| Package |
| 小行星一万零六|小行星20010|已填充|
数据库表:项目信息
| 项目ID|项目_状态|
| - ------|- ------|
| 小行星20001|诱导|
| 小行星20001|股票|
| 二○ ○ ○二年|诱导|
| 二○ ○ ○二年|股票|
| 二○ ○ ○二年|储存|
| 二○ ○ ○二年|码头|
| 二○ ○ ○三|诱导|
| 二○ ○ ○三|股票|
| 二○ ○ ○三|储存|
| 二○ ○ ○四|诱导|
| 二○ ○ ○四|取消|
| 二○ ○ ○四|储存|
| 二○ ○ ○五|诱导|
| 二○ ○ ○五|股票|
| 二○ ○ ○五|储存|
| 二○ ○ ○六|诱导|
| 二○ ○ ○六|拒绝|
| 二○ ○ ○六|诱导|
| 二○ ○ ○六|股票|
| 小行星2000|诱导|
| 小行星2000|股票|
| 小行星2000|储存|
| 小行星2000|储存|
| 二○ ○ ○八|诱导|
| 二○ ○ ○八|股票|
| 二○ ○ ○八|拒绝|
| 小行星2000|诱导|
| 小行星2000|股票|
| 小行星2000|诱导|
| 小行星2000|储存|
| 小行星20010|诱导|
| 小行星20010|股票|
理想输出:
| 发货ID|项目ID|发货_大小|发货_就绪|项目_已存储|
| - ------|- ------|- ------|- ------|- ------|
| 小行星|小行星20001|1个|是的|没有|
| 小行星|二○ ○ ○二年|第二章|没有|是的|
| 小行星|二○ ○ ○三|第二章|没有|是的|
| 小行星10003|二○ ○ ○四|1个|没有|是的|
| 小行星|二○ ○ ○五|三个|是的|是的|
| 小行星|二○ ○ ○六|三个|是的|没有|
| 小行星|小行星2000|三个|是的|是的|
| 小行星10005|二○ ○ ○八|第二章|没有|没有|
| 小行星10005|小行星2000|第二章|没有|是的|
| 小行星一万零六|小行星20010|1个|没有|是的|
下面的代码让我得到了前两列,但是我在如何连接第二个表并得到第三列上遇到了麻烦。任何帮助都将不胜感激。
select ShipmentID,ItemID,
count(ItemID) over (partition by ShipmentID) Shipment_Size,
case when
sum(case when Item_status='Packed' then 1 else 0 end) OVER (partition by ShipmentID ) =count(ItemID) over (partition by ShipmentID)
then 'Yes' else 'no' end as Shipment_Ready
from Shipment_INFO
group by ShipmentID,Item_status,ItemID
1条答案
按热度按时间7kqas0il1#
我认为您只需要使用
exists
的简单case
表达式: