SQLで日付(西暦)を月ごとにグループ化する方法がわかりません。
よろしくお願いいたします。
売上テーブル(URIAGE)
①売上番号(SLIPNO)
②売上日(SLIPDATE)
③売上金額(TOTALPRICE)
1,2006/01/01,1000
2,2006/01/10,2000
3,2006/02/02,,2000
4,2006/03/03,3000
5,2006/04/04,4000
6,2006/05/05,4444,4000,A004,得意先4
西暦を画面から入力して
①月別の売上一覧表を抽出するには?
1 2 3 4 5
3000 2000 3000 4000 4000
SELECT U.SLIPDATE,CAST(SUM(TOTALPRICE) AS INT)
FROM
URIAGE U
WHERE
EXTRACT (YEAR FROM U.SLIPDATE)=:NEN
GROUP BY U.SLIPDATE
ORDER BY U.SLIPDATE
Oracleで説明します。
2006年の1月から12月を集計
Select
SUM(DECODE(Substr(SLIPDATE,6,2),'01',TOTALPRICE,0)) as M1
,SUM(DECODE(Substr(SLIPDATE,6,2),'02',TOTALPRICE,0)) as M2
,SUM(DECODE(Substr(SLIPDATE,6,2),'03',TOTALPRICE,0)) as M3
,SUM(DECODE(Substr(SLIPDATE,6,2),'04',TOTALPRICE,0)) as M4
,SUM(DECODE(Substr(SLIPDATE,6,2),'05',TOTALPRICE,0)) as M5
,SUM(DECODE(Substr(SLIPDATE,6,2),'06',TOTALPRICE,0)) as M6
,SUM(DECODE(Substr(SLIPDATE,6,2),'07',TOTALPRICE,0)) as M7
,SUM(DECODE(Substr(SLIPDATE,6,2),'08',TOTALPRICE,0)) as M8
,SUM(DECODE(Substr(SLIPDATE,6,2),'09',TOTALPRICE,0)) as M9
,SUM(DECODE(Substr(SLIPDATE,6,2),'10',TOTALPRICE,0)) as M11
,SUM(DECODE(Substr(SLIPDATE,6,2),'11',TOTALPRICE,0)) as M11
,SUM(DECODE(Substr(SLIPDATE,6,2),'12',TOTALPRICE,0)) as M12
from URIAGE
WHere SLIPDATE >= '20060101'
and SLIPDATE <= '20061231'
SLIPDATAがDATE型でしたらString型にしてください。
GTRさんありがとうございます。
余談ですがGTRに乗ってました。
DB:interbase(FireBird)
SLIPDATA:TIMESTAMP型
GTRさんの参考に調べてみます。
FireBirdだとDecode関数が無かったと思います。
UDFを拡張しなくてはいけないですね。
サンプルです。(WIndows+Delphi)
function Decode(value1, value2, matchResult, unmatchResult : PChar) : PChar; cdecl; export;
var s : String;
begin
if (strcomp(value1, value2) = 0) then s := matchResult
else s := unmatchResult;
Result := MakeResultString(PChar(s), nil, 0);
end;
freeUDFLibなどダウンロードして参考にされてください。
http://www.ibsurgeon.com/links.html
の下の方にあると思います。
GROUP BY
EXTRACT(YEAR FROM SLIPDATE), EXTRACT(MONTH FROM SLIPDATE)
でグループ化できませんか?
ツイート | ![]() |