我有这个查询,我得到每个范围的两个值(CurrentValue和NextValue)之间的所有寄存器,就是当我到达最后一个值时......没有NextValue来获取寄存器为当前价值这样的东西
CV NV
10245<-->10369 = (10263,10333,10357)
10963<-->11052 = (10964,11000,11022)
11300<-->"NoNextValue" = (Still needing the Values after 11300)
我想知道的是如果有一种方法可以在JOIN中将ON语句放入ON比较中
我有这个
WITH CTE AS
(
rownum = ROW_NUMBER() OVER (ORDER BY mif.Row1),
*
FROM DispatchFianzas.dbo.MisFianzas mif
)
SELECT c.*
FROM (SELECT * FROM (SELECT b.*, CTE.FolioTrip as CurrentValue, nex.FolioTrip as NextValue
FROM UltraTrips.dbo.Bails b
LEFT JOIN CTE ON CTE.bail = b.bail
LEFT JOIN CTE nex ON nex.rownum = CTE.rownum + 1
)a
LEFT JOIN DispatchBails.dbo.Trips t
ON t.trip BETWEEN a.CurrentValue AND a.NextValue ) c
你可以在最后一行看到&#34;关于a.CurrentValue和a.NextValue&#34;的关系。我用这个来制作JOIN,但我想要像这样的东西
ON IF(a.NextValue IS NOT NULL)
BEGIN
t.trip BETWEEN a.CurrentValue AND a.NextValue
END
ELSE
t.trip > a.CurrentValue
,所以...你能告诉我这样做的方法吗?谢谢
答案 0 :(得分:0)
不要认为你可以在联接中使用case语句,你需要使用OR。
ON
(a.NextValue is not null
and
t.trip BETWEEN a.CurrentValue AND a.NextValue)
or
t.trip > a.CurrentValue
答案 1 :(得分:0)
以下Case子句可用于替换您编写的IF语句,并且对SQL
有效On 1 = CASE WHEN a.NextValue IS NOT NULL
AND t.trip between a.CurrentValues AND a.NextValue THEN 1
WHEN a.NextValue IS NULL AND t.trip > a.CurrentValue THEN 1
ELSE 0
END
只需检查选择的性能,因为我不确定它对索引的表现如何。