【发布时间】:2020-09-24 09:09:37
【问题描述】:
我想创建一个“票证”,用于计算每个 ID 的通行证次数。当我们在任何 ID 上拥有黄金通行证时,这意味着该通行证适用于所有预订的人。所以对于这个例子,我们想要计算 5。对于其他 pass_codes,我们想要简单地计算 pass 的数量并排除那些为 null 的。我在下面有一个预期的输出。
假设我有这些数据:
Passes
ID | GuestID | Pass_code
----------------------------
100 | 001 | Bronze
100 | 002 | Bronze
101 | 103 | Gold
101 | 104 | NULL
101 | 105 | NULL
101 | 106 | NULL
101 | 107 | NULL
102 | 208 | Silver
103 | 209 | Steel
103 | 210 | Steel
103 | 211 | NULL
Passengers
ID | Passengers
-----------------
100 | 2
101 | 5
102 | 1
103 | 3
我想计算然后在输出中创建一张票:
ID 100 | 2 pass (bronze)
ID 101 | 5 pass (because it is gold, we count all passengers)
ID 102 | 1 pass (silver)
ID 103 | 2 pass (steel) (2 passes rather than than 3 as we just want to count only the passes for steel, bronze silver)
我想做这样的事情,但作为一个组合查询。
DECLARE @ID = 101; -- i will want to pass in IDs
-- for gold, we want to count all passengers when the gold pass is on
SELECT pp.Passengers
FROM passes
JOIN Passengers pp ON p.ID = pp.ID
WHERE p.pass_code IN'%gold%'
AND PP.id = @id
-- for bronze, silver and steel
SELECT
count(p.ID)
FROM Passes
WHERE p.ID = @id
AND P.pass_code IN ('Bronze', 'silver', 'steel') -- Dont want to check based on NUlls as this may chnage to something else.
)
任何帮助或建议将不胜感激。
【问题讨论】:
标签: oracle plsqldeveloper