2017-01-29 6 views
0

私は週単位でデータを表示したい場合はDATEPARTを使用する必要があることがわかりました。私はSQLクエリをどのようにまとめるのか分かりません。SQL Datepart、週単位の列を掛ける

これまでのところ、これが一般的な考えです。

var querythis = "SELECT DATEPART(wk, (kg * sett * rep)) as weeklyvol FROM Test GROUP BY date, kg, sett, rep"; 

ので、kgsettrepは私のデータベース列の3があり、また、それらの3がすべてintegersはので、私は毎週の合計にそれらを乗算したいです、もちろんdatetimeあるdateを持っています。例えば

:上記のコード行^一部が何週につながる

24 Jan 2017 - 100 x 10 x 3 = 3000 
25 Jan 2017 - 100 x 5 x 5 = 2500 
26 Jan 2017 - 150 x 3 x 3 = 1350 

= 6850 4

GROUP BY date, kg, sett, rep"; 

イム実際にはわからない、私はすべてを含める必要がありましたそれらか私は誤りを得るでしょう。

現在のところ、私は次のように書きますが、私の望む結果は得られませんが、数字がどういうものなのか知ることさえできませんが、少なくとも正しくはありません。

foreach (var c in db.Query(querythis)) 
{ 
    <a>@c.weeklyvol</a><br /> 
} 

誰でもこれを行う方法はわかりますか?

違いがある場合は、SQL Server Compactを使用しています。

答えて

1

あなたはこのような何かを探している:

SELECT 
    DATEPART(wk, date), 
    sum(kg * sett * rep) as weeklyvol 
FROM 
    Test 
GROUP BY 
    DATEPART(wk, date) 

これはそれとして、日付、およびグループから一週間かかり、また、第二のカラムとしてボリュームの合計を表示します。 datepartにwkの代わりにisowkを使用します。

年も必要な場合は、datepart(year...を使用すると正しく動作しません(例:this linkを参照)。 52週目の日付がなければ、53と1は間違った年番号を持つ可能性があります。

+0

クール、それは間違いなくトリックでした!しかし、年が変わると、週番号で日付ではなく、注文であることがわかります。これは私が解決できるものですか?すなわち、週522016から週20171に進むと、週52の前に週1の結果が表示されます。 –

+0

はい、私の国では 'isowk'がお勧めです! –

+0

その年の別の列を追加し、でグループに追加することができます。最大の問題は、iso週の正しい年をフェッチする機能がないことです。なぜなら、週が52/53/1週には必ずしも正しいとは限らないからです。 [examples](http://stackoverflow.com/questions/22829604/what-is-iso-year-in-sql-server)には、そのための関数を作成する方法があります。 –

関連する問題