对于"产品预订系统";,我有两张桌子:
- "RD";,用于全局预订数据(字段:ID、CustomerID、Date…(
- "RP";,用于每个保留的保留产品数据(字段:ID、RD_ID、ProductID、Status…(。RD_ID与RD表中的ID匹配(用于加入的字段(。状态字段可以具有以下值:O、C、S
我需要提取(使用2条选择说明(所有产品状态为"O"的预订列表和预订数量。
RP的数据示例:
ID | RD_ID | ProdID | Status
----------------------------
1 | 1 | 100 | O
2 | 1 | 101 | O
3 | 1 | 102 | O
4 | 2 | 105 | O
5 | 2 | 100 | S
6 | 3 | 101 | C
7 | 3 | 102 | O
在本例中,Select语句应仅返回RD_ID 1
对于ID的编号,以下请求不起作用,因为它还包括具有不同状态的产品的预订:
SELECT COUNT(rd.ID) FROM rd INNER JOIN rp ON rp.RD_ID = rd.ID WHERE rp.Status = 'O';
你能帮我取正确的Select语句吗?
谢谢。
SELECT rd.ID,COUNT(rd.ID(CountOfRD,status从rd内部连接rp.rd_ID上的rp按rd.ID分组,状态
按如下方式使用not exists
:
Select t.* from your_table t
Where t.status = 'O'
And not exists (select 1 from your_table tt
Where t.rd_id = tt.rd_id
And t.status != tt.status)
您也可以按如下方式使用group by
和having
:
Select rd_id
From your_table t
Group by rd_id
Having sum(case when status <> 'O' then 1 end) > 0