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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.93214 の関連記事表示

<< 0 >>
■93214  Re[3]: SQL
□投稿者/ たーん -(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)
    
    
記事No.93196 のレス /過去ログ161より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -