0

私はこの種のデータを持っています:

Date         Count1 Count2 Count3 ... Countxx
01-05-2012   1      0      1          2
01-05-2012   2      1      3          0
01-05-2012   2      3      3          1
02-05-2012   1      3      2          0
02-05-2012   5      2      0          0

そして、日付ごとにグループ化されたそれぞれのフィールド (Count1 から Countxx まで) の合計を計算する必要があり、次の SQL を書きました。

select sum(count1), sum(count2), sum(count3), .. , sum(countxx) 
from table1 group by date

私の最初の質問:SQLサーバーでこれを自動的に行う方法はありますか(フィールドの名前と数は毎回異なるため、フィールドの数を知らなくても、手動でSQLを書くのは非常に面倒です)。

第二に、現在の行から前の行を差し引いた値と前の7行の平均を計算する方法は?

ありがとう!

4

2 に答える 2

0

There is no way to sum a variable list of columns, you have to specify them all.

One way to look up the previous row is outer apply, like:

select  Date
,       cur.count1 - isnull(prev.count1,0) as Delta1
from    Table1 cur
outer apply
        (
        select  top 1 *
        from    Table1 prev
        where   prev.Date < cur.Date
        order by
                prev.Date desc
        ) prev

Another way is to join the tables based on row_number():

; with  t1 as
        (
        select  row_number() over (order by Date) as rn
        ,       *
        from    Table1
        )
select  Date,
,       cur.count1 - isnull(prev.count1,0) as Delta
from    t1 cur
left join    
        t1 prev
on      cur.rn = prev.rn + 1
于 2012-06-15T09:06:14.970 に答える