C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■93214 / )  Re[3]: SQL
□投稿者/ たーん (1回)-(2019/11/28(Thu) 11:29:34)
犬夜叉さんの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)


返信 編集キー/


管理者用

- Child Tree -