sql >> データベース >  >> RDS >> Sqlserver

表演算子 APPLY を使用する場合

    まず第一に - applyテーブル値関数を呼び出すことができます パラメータ値は、クエリするテーブルから取得されます。たとえば、次のようになります:

    select
        t1.col3, -- column from table
        f1.col1  -- column from function
    from table1 as t1
        left outer join table2 as t2 on t2.col1 = t1.col1
        outer apply dbo.function1(t1.col1, t2.col2) as f1
    

    または xml 列の細断処理

    select
        t1.col3,
        t.c.value('@value', 'int') as value
    from table1 as t1
        -- table1.col1 is xml iike <Data @Value="...">...</Data>
        outer apply t1.col1.nodes('Data') as t(c) 
    

    私の経験から、apply 事前計算を行う必要がある場合に非常に便利です :

    select
        t1.col3,
        a1.col1,  --calculated value
        a2.col1   -- another calculated value, first one was used
    from table1 as t1
        outer apply (select t1.col1 * 5 as col1) as a1
        outer apply (select a1.col1 - 4 as col1) as a2
    

    apply を使用した別の例 ピボット解除です 操作:

    select
        t1.col1, c.name, c.value
    from table1 as t1
        outer apply (
            select 'col1', t1.col1 union all
            select 'col2', t1.col2
        ) as c(name, value)
    

    最後に、クエリは次のとおりです apply を使用せずに SQL 2005 で実装 :

    ;with cte as (
        select
            y.Name, 
            y.hoursWorked,
            x.game,
            x.NumBets,
            row_number() over(partition by x.Name order by x.NumBets) as row_num
        from y
            left outer join x on x.Name = y.Name
    )
    select Name, hoursWorked, game, NumBets
    from cte
    where row_num <= 2
    order by Name, NumBets desc
    

    SQL フィドルを参照してください




    1. ユーロ記号がサイトに表示されない

    2. 空でない場合は、重複するテキストフィールドからデータベースに挿入しますphp sql

    3. 警告をテーブルに記録する

    4. java.net.ConnectException