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

ヌル値の以前の値を取得する方法

    SQL Server 2012を使用しているので、これを使用するバージョンがあります。他のソリューションよりも高速かもしれませんが、データでテストする必要があります。

    sum() over() Idで並べ替えられた現在の合計を実行します 1を追加する 列に値があり、nullの現在の値を保持している場合 値。次に、計算されたランニングサムを使用して、結果をfirst_value() over()に分割します。 。 Idで並べ替えられた最初の値 ランニングサムによって生成された行の「グループ」ごとに、必要な値があります。

    select T.Id,
           first_value(T.FeeModeId) 
              over(partition by T.NF 
                   order by T.Id 
                   rows between unbounded preceding and current row) as FeeModeId,
           first_value(T.Name)      
              over(partition by T.NS 
                   order by T.Id 
                   rows between unbounded preceding and current row) as Name,
           T.Amount
    from (
         select Id,
                FeeModeId,
                Name,
                Amount,
                sum(case when FeeModeId is null then 0 else 1 end) 
                  over(order by Id) as NF,
                sum(case when Name is null then 0 else 1 end) 
                  over(order by Id) as NS
         from YourTable
         ) as T
    

    SQLフィドル

    SQL Server 2012より前に機能するもの:

    select T1.Id,
           T3.FeeModeId,
           T2.Name,
           T1.Amount
    from YourTable as T1
      outer apply (select top(1) Name
                   from YourTable as T2
                   where T1.Id >= T2.Id and
                         T2.Name is not null
                   order by T2.Id desc) as T2
      outer apply (select top(1) FeeModeId
                   from YourTable as T3
                   where T1.Id >= T3.Id and
                         T3.FeeModeId is not null
                   order by T3.Id desc) as T3
    

    SQLフィドル



    1. PHP/Mysqlの特殊文字の挿入が切り捨てられています

    2. エラー1067(42000):「created_at」のデフォルト値が無効です

    3. 複数の日付列を持つmysqlでのピボット解除に関するヘルプが必要

    4. phpMyAdminをインストールする方法