私は(UNION ALL経由)次の表を作成しました:変更日付とグループ
ID Date Hour Weight Fiscal
AAA 1/27/2009 0 10 0
AAA 1/30/2009 0 20 0
AAA 2/14/2009 0 10 0
AAA 2/18/2009 0 20 0
AAA 2/27/2009 0 20 0
AAA 2/28/2009 0 20 0
AAA 1/14/2009 10 0 0
AAA 2/14/2009 20 0 0
AAA 2/16/2009 10 0 0
AAA 2/25/2009 10 0 0
AAA 2/26/2009 10 0 0
AAA 3/3/2009 20 0 0
NULL 0 0 0 1/28/2009
NULL 0 0 0 2/27/2009
NULL 0 0 0 3/29/2009
をそして、私は取得したいと思います:
ID Date Hour Weight
AAA 1/28/2009 10 10
AAA 2/27/2009 50 50
AAA 3/29/2009 20 20
それは最初の日付を変換する必要があります(例えば1/27/2007 - > 1/28/2009、1/30/2009 - > 2/27/2009など)、その値でグループ化します。
私は使用することができた:
SELECT ID
, left(CONVERT(VARCHAR(10)
, date, 111),7) as Date
, round(sum(Hours),0) as Hours
, round(sum(Weight),0) as Weight
FROM ...
GROUP BY ID
, left(CONVERT(VARCHAR(10), date, 111),7)
ORDER by ID ASC
, left(CONVERT(VARCHAR(10), date, 111),7) ASC
しかしカレンダー日付によってそのちょうどグループは、財政月に応じて、私は年度列に持って終了していません。
ここではどのDBエンジンを使用していますか?また、最初の出力を返すSQLをポストすることもできます。 –
この質問を明確にする必要があります。上記の表のFiscalは最初の12個のエントリが0なので、これらの日付はどのように計算されますか?時間と重量は何らかの形で会計月の計算に関係していますか? 1行を計算するために複数の行を結合していますか(実際の会計月を決定するために複数の行にAAAエントリを追加するなど)基本的な問題を減らしてください。 – razzed
最初のステップは、データを2つの別々のテーブルに取得することです。 2番目の表に会計年度を表し、それぞれに開始日と終了日を指定します。上のUNION ALLの混乱からそれを並べ替えることは、愚かです。そのテーブルを使用することで、グループ化はかなり簡単になります。あなたは財政の終わりまでにグループ化し、 '財政的なstart_andartとfiscal_end'の間に 'dateval'で参加します。 BETWEEN/ANDの包括的な範囲がここで非常に役立ちます。 –