无法解释此SQL查询
我确信这类问题是不受欢迎的,但我真的需要一些帮助。在过去的3个小时里,我一直在关注这个SQL查询,我无法解释其中的一些逻辑。通常我不会问,但我快到最后期限了 在WHERE子句中,您将看到If构造。据我所见,它检查提货日期是否有效 然而,它的措辞看起来很奇怪,它不总是导致“中间”吗?如果x>y且x无法解释此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
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_District.ValidFrom]
AND [DWH_PickOrderLines_Temp].[PickDateTime] < [R14_Distinct_Warehouse_Location].[tbl_Location_Zone_District.ValidTo]
AND [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]
为什么你认为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]今日提示:表格别名!