| 犬夜叉さんのSQLの場合、TB1.NO が 2.5 のときに 4 行取得されますが合っていますか?
パズルのつもりで解いてみましたがいかがでしょう。
(以下のSQLでは TB1.NO が 2.5 のときは 2 行取得です)
WITH
TB1 (NO, NAME) AS (
SELECT 2 , 'a'
UNION SELECT 1.5, 'b'
),
TB2 (ID, NAME, NO2) AS (
SELECT 1, 'a', 1
UNION SELECT 1, 'b', 2
UNION SELECT 2, 'c', 1
UNION SELECT 2, 'd', 2
UNION SELECT 2, 'e', 3
UNION SELECT 2, 'f', 4
)
select
NO,NAME,ID,NAME2,NO2
from
(
select
TB1.NO
,TB1.NAME
,TB2.ID
,TB2.NAME AS NAME2
,TB2.NO2
,MAX(TB2.NO2)OVER(PARTITION BY TB1.NO,TB2.ID) / 2 as BORDER
from
TB1
inner join
TB2
on TB1.NO-1 < TB2.ID and TB2.ID < TB1.NO+1
) T
where
NO = ID
or (NO > ID and NO2 > BORDER)
or (NO < ID and NO2 <= BORDER)
|