我有一个查询,如果该位置有效,我需要在商店中提取所有基本和季节性头寸:
Select ojr.StoreNumber, ojr.Seasonal, ojr.JobType
FROM OJR ojr
Inner Join OJR_StoreInfo si on ojr.StoreNumber = si.Storenumber AND
CASE WHEN si.Seasonal-Barista = 1 Then 1 WHEN si.Base-Barista = 1
Then 0 ELSE NULL END = ojr.Seasonal
表结构如下:
OJR
ID StoreNumber Seasonal JobType
___________________________________
1 71001 0 Barista
2 71001 1 Barista
3 71002 0 Barista
4 71002 0 Sales
StoreInfo
StoreNumber Base-Barista Seasonal-Barista Base-Sales Seasonal-Sales
_______________________________________________________________________
71001 1 1 1 0
71002 0 1 1 1
71003 0 0 0 0
所以问题在于,当我运行上面的查询时,ID 1没有进来,因为Storeinfo同时接收季节性和基本的baristas,但INNER JOIN确定我正在寻找季节性因为它击中了第一个什么时候进入“结束”,永远不会到达第二个时间。还有另一种方法可以解决这个问题吗?我认为内连接需要一个子查询,但我还是想不通。
期望的输出:
StoreNumber Seasonal JobType
__________________________________
71001 0 Barista
71001 1 Barista
71002 0 Sales
感谢您的帮助!
答案 0 :(得分:1)
您可以在不使用case
表达式的情况下重新制定加入条件,如下所示:
SELECT
ojr.StoreNumber
, ojr.Seasonal
, ojr.JobType
FROM OJR ojr
INNER JOIN OJR_StoreInfo si
ON ojr.StoreNumber = si.Storenumber
AND ((si.Seasonal-Barista = 1 AND ojr.Seasonal=1) OR (si.Base-Barista = 1 AND ojr.Seasonal=0))
上述条件消除了提出与ojr.Seasonal
匹配的数字的需要,将其替换为两个独立的逻辑条件。