无法解释此SQL查询

无法解释此SQL查询,sql,ms-access,if-statement,Sql,Ms Access,If Statement,我确信这类问题是不受欢迎的,但我真的需要一些帮助。在过去的3个小时里,我一直在关注这个SQL查询,我无法解释其中的一些逻辑。通常我不会问,但我快到最后期限了 在WHERE子句中,您将看到If构造。据我所见,它检查提货日期是否有效 然而,它的措辞看起来很奇怪,它不总是导致“中间”吗?如果x>y且x=[R14_Distinct_Warehouse_Location].[tbl_Location_Zone_District.ValidFrom]和[DWH_PickOrderLines_Temp].[P

我确信这类问题是不受欢迎的,但我真的需要一些帮助。在过去的3个小时里,我一直在关注这个SQL查询,我无法解释其中的一些逻辑。通常我不会问,但我快到最后期限了

在WHERE子句中,您将看到If构造。据我所见,它检查提货日期是否有效

然而,它的措辞看起来很奇怪,它不总是导致“中间”吗?如果x>y且x 这个“如果”的结果也适用于什么对象?我对它的解释是,最终的结果是“介于”和“介于”之间,这根本没有意义

感谢您的帮助。本查询仅供访问

SELECT
  DWH_PickOrderLines_Temp.*,
  IIf(DWH_PickOrderLines_Temp.WayOfTransport IN ("ON", "PD"), "Kitting " & Mid(tbl_District_Activiteit.Activiteit, 8), IIf(DWH_PickOrderLines_Temp.PickMethode IN ("K", "V"), "Picking Bulk", tbl_District_Activiteit.Activiteit)) AS Activiteit,
  IIf(DWH_PickOrderLines_Temp.WayOfTransport IN ("ON", "PD"), "Kitting", tbl_District_Activiteit.[Activiteit groep]) AS [Activiteit groep],
  R14_Distinct_Warehouse_Location.Proces,
  R14_Distinct_Warehouse_Location.Gebouw
FROM DWH_PickOrderLines_Temp
LEFT JOIN R14_Distinct_Warehouse_Location
  ON DWH_PickOrderLines_Temp.PickLocation = R14_Distinct_Warehouse_Location.PickLocation
WHERE (((IIf([DWH_PickOrderLines_Temp].[PickDateTime] >= [R14_Distinct_Warehouse_Location].[tbl_Location_Zone_District.ValidFrom]
AND [DWH_PickOrderLines_Temp].[PickDateTime] < [R14_Distinct_Warehouse_Location].[tbl_Location_Zone_District.ValidTo], "Between", "Not Between")) = "Between")
AND ((IIf([DWH_PickOrderLines_Temp].[PickDateTime] >= [R14_Distinct_Warehouse_Location].[tbl_District_Activiteit.ValidFrom]
AND [DWH_PickOrderLines_Temp].[PickDateTime] < [R14_Distinct_Warehouse_Location].[tbl_District_Activiteit.ValidTo], "Between", "Not Between")) = "Between"));

where从不返回值。而且它是重复的

declare @pickdate int = 1
declare @validForm int = 0

print 'start'
if(((IIf(@pickdate >= @validForm AND @pickdate < @validForm, 'Between', 'Not Between')) = 'Between') 
AND ((IIf(@pickdate >= @validForm AND @pickdate < @validForm, 'Between', 'Not Between')) = 'Between'))
print 'test'

我认为查询遗漏了对两个表的部分引用,请参见上面的注释。无论如何,我认为您可以简化where条件:

WHERE [DWH_PickOrderLines_Temp].[PickDateTime] >= [R14_Distinct_Warehouse_Location].[tbl_Location_Zone_Distric‌​t.ValidFrom] 
       AND [DWH_PickOrderLines_Temp].[PickDateTime] < [R14_Distinct_Warehouse_Location].[tbl_Location_Zone_Distric‌​t.ValidTo] 
  AND [DWH_PickOrderLines_Temp].[PickDateTime] >= [R14_Distinct_Warehouse_Location].[tbl_District_Activiteit.V‌​alidFrom] 
       AND [DWH_PickOrderLines_Temp].[PickDateTime] < [R14_Distinct_Warehouse_Location].[tbl_District_Activiteit.V‌​alidTo]
为什么你认为if语句总是导致“中间”

基本上,条件归结为:

where
pickDateTime between validFrom1 and validTo1
and
pickDateTime between validFrom2 and validTo2

您确定完整地报告了整个查询吗?tbl_Location_Zone_District和tbl_District_Activititeit的连接在哪里?Jup,这是整个查询。我也注意到了缺少的连接。它还能工作吗?无论如何,我可以说,你应该简化它:WHERE[DWH_PickOrderLines_Temp].[PickDateTime]>=[R14_Distinct_Warehouse_Location].[tbl_Location_Zone_District.ValidFrom]和[DWH_PickOrderLines_Temp].[PickDateTime]<[R14_Distinct_Warehouse_Location_]。[tbl_Location_Zone_District.ValidTo]和[DWH_PickOrderLines_Temp]。[PickDateTime]>=[R14_Distinct_Warehouse_Location]。[tbl_District_Activieteit.ValidFrom]和[DWH_PickOrderLines_Temp]。[PickDateTime]<[R14_Distinct_Warehouse_Location_ActivieteIt.ValidTo]今日提示:表格别名!