1

正直に言うと、テーブル構造やクエリについては詳しく説明しません。私の問題が当てはまる非常に単純なシナリオを説明します。

セールスマンは商品を販売します。毎月、各セールスマンの総売上を計算しています。特定の月に、彼らの売上高を 2 倍にします。たとえば、2012 年 2 月に Pauline が $10,000 相当の商品を販売した場合、売上は $20,000 として記録されます。

たとえば、次のような販売テーブルがあります。

Salesman_Id    Period       Sales
Pauline        201201       4200
Johnny         201201       2000
Rowan          201201       8100
Pauline        201202       3300
Johnny         201202       2900
Rowan          201202       1100
Pauline        201203       8000
Johnny         201203       4000
Rowan          201203       3100

私は販売期間テーブルを持っています、例えば:

Sales_Period    Double_Period
201201          F
201202          T
201203          F

販売期間テーブルは、期間 2012/02 が 2 倍の期間であることを示しています。つまり、販売したアイテムの値が 2 倍になります。これは、一日の終わりに、次のようになることを意味します。

Salesman_Id         Total_Sales
Pauline             18800
Johnny              11800
Rowan               13400

たとえば、ローワンの売上 = 8100 + (1100*2) + 3100 = 13400

したがって、私の質問は、Double_Period を考慮して、毎月のすべてのセールスマンの総売上のレポートを作成するにはどうすればよいですか? これは難しいものではないはずです。皆さんが助けてくれることを願っています。

4

1 に答える 1

2

SUM()ここでは、関数を使用して総売上を取得する必要があります。CASEまた、 の場合は、ステートメントを使用して売上額を乗算する必要がありますDouble_Period = T
だからこれを試してください:

SELECT s.Salesman_Id
, SUM(CASE WHEN sp.Double_Period = 'T' 
           THEN 2 * s.Sales 
           ELSE s.Sales END) AS Total_Sales
FROM Sales s 
JOIN Sales_period sp
  ON s.Period = sp.Sales_Period
GROUP BY s.Salesman_Id

出力:

╔═════════════╦═════════════╗
║ SALESMAN_ID ║ TOTAL_SALES ║
╠═════════════╬═════════════╣
║ Johnny      ║       11800 ║
║ Pauline     ║       18800 ║
║ Rowan       ║       13400 ║
╚═════════════╩═════════════╝

このSQLFiddleを参照してください

于 2013-05-02T10:01:17.407 に答える