2017-02-10 10 views
0

注文が行われた日付として「entry_date」[datatype:datetime2(7)]という名前のテーブルがあります。この日付に対応して、私は注文が行われた金額を格納する 'order_amt' [datatype:money]という列を持っています。この表には、 'refund_date' [datatype:datetime2(7)]と 'refund_amt'払い戻しが行われた日付とその金額を保存します。 2015年の各月の総収益[order_amt-refund_amt]を選択する必要があります。日付の列から月をグループ化し、すべての月に数量を追加する

P .:私はSQLの新機能であり、Stackoverflowです。

+0

タグを試してみてください。いくつかのサンプル・テーブル・データと期待される結果を追加します。 – jarlh

+0

2015年12月に注文があったものの、2016年に払い戻しが行われたとします.2015年の計算で払い戻し額をカウントするのか、ゼロとして扱うべきですか? –

+0

2015年には0として扱う必要があります。ありがとうTim – Gompu

答えて

0

datetime2は、私が知る限り、SQL Serverの種類です。もしそうなら、あなたは次のクエリを試すことができます。

DECLARE @start_date Date, @end_date DATE 
SET @start_date = '2015-01-01' 
SET @end_date = '2015-12-31' 

SELECT DATEPART(MONTH, entry_date) AS month, 
     SUM(order_amt - refund_amt) AS total_revenue 
FROM Orders 
WHERE entry_date >= @start_date AND entry_date <= @end_date 
GROUP BY DATEPART(MONTH, entry_date) 

注:DATEPART(MONTH, entry_date)あなたがグループに使いたいものですentry_date列から月を抽出します。 @start_date@end_date変数は、entry_dateに使用する境界を指定します。

+0

すぐにお返事ありがとうございます。払い戻し日を考慮しないでください。 – Gompu

+0

また、開始日と終了日の範囲で変数を宣言して使用する必要がある場合、回答はどのように変更されますか? – Gompu

+0

注文の年をどのように定義しますか?その注文をカウントするために2015年に払い戻しも行われなければなりませんか? –

0

は、あなたが使用しているDBMSこの

select datepart(month,entry_Date) as month, 
sum(order_amt-coalesce(refund_amt,0))) as total_amount 
from orders 
where entry_date>='20150101' and entry_date<'20160101' 
group by datepart(month,entry_Date) 
+0

ありがとうございます。払い戻しの日付を考慮する必要はありませんか? – Gompu

関連する問題