Microsoft Access 中的条件连接

问题描述 投票:0回答:1

Microsoft Access 是否有任何方法可以根据特定条件更改两个查询的连接方式?我已经在其他环境中使用 Case 语句成功地做到了这一点,但我认为这在 Access 中是不可能的。

下面的代码是我过去的做法。有没有办法在访问中复制这个查询?

select 
A.PROC,
A.MOD1, 
A.MOD2,
A.POS,
B.POS as FRM_T17_POS, 
A.TOS,
B.TOS as FRM_T17_TOS,
A.Specialty,
B.SPCLTY as FRM_T17_Specialty,
A.State,
B.ST_CD as FRM_T17_State,
A.AMT AS FRM_Addendum format dollar10.2,
B.AMT AS FRM_T17 format dollar10.2, 
A.AMT-B.AMT AS DIFF format dollar10.2,
A.EFFECTIVE_DATE1 format=mmddyy10.,
B.BEG AS Beg_T17 format=mmddyy10.,
B.TRM AS Trm_T17 format=mmddyy10.,
B.SYS_SETUP_DT AS T17_SETUP_DT format=mmddyy10.,
C.SYS_PRCD_CD_TRM as Termed_Procs format=mmddyy10. 

From 
pricing.Addendum_001 A
left outer join
pricing.t17_001 B
on
A.PROC = B.PROC
and
A.MOD1 = B.MOD1
and
A.MOD2 = B.MOD2

and 
case when a.Fee_Sch <> '' then
A.Fee_Sch = B.FS
else
A.Fee_Sch = ''
end

and
CASE WHEN A.TOS <> '' THEN
A.TOS = B.TOS
else A.TOS = ''
END

and
CASE WHEN A.STATE <> '' THEN
A.STATE = B.ST_CD
else A.STATE = ''
END

and
CASE WHEN A.Specialty <> '' THEN
A.Specialty = B.SPCLTY
else A.Specialty = ''
END

and
CASE WHEN A.POS <> '' THEN
A.POS = B.POS
else A.POS = ''
END

and 
A.EFFECTIVE_DATE1 < B.TRM
and
A.EFFECTIVE_DATE1 >= B.BEG


left outer join
pricing.TrmdCodes c
on
A.PROC = c.SYS_PRCD_CD

order by 
FS_T17,POS, A.Specialty
sql ms-access-2010
1个回答
1
投票

我觉得你的任何条件都像

case when A.X <> '' then
A.X = B.Y
else
A.X = ''
end

可以改写为

(A.X = B.Y OR A.X = '')

这样的过滤器对于 Access 查询 SQL 中的连接条件是有效的(但是当您尝试切换到设计模式时,它说设计模式不支持这种表达式)

© www.soinside.com 2019 - 2024. All rights reserved.