私は売上データ、以下の有用なデータを含む大きなテーブルを持っています:
RowID Date Customer Salesperson Product_Type Manufacturer Quantity Value
1 01-06-2004 James Ian Taps Tap Ltd 200 £850
2 02-06-2004 Apple Fran Hats Hats Inc 30 £350
3 04-06-2004 James Lawrence Pencils ABC Ltd 2000 £980
...
Many rows later...
...
185352 03-09-2012 Apple Ian Washers Tap Ltd 600 £80
さまざまなタイプの値を含むテーブルから大量のターゲットを計算する必要があります。ターゲットテーブルは私の管理下にあり、これまでのところ次のようになっています。
TargetID Year Month Salesperson Target_Type Quantity
1 2012 7 Ian 1 6000
2 2012 8 James 2 2000
3 2012 9 Ian 2 6500
現在、余分な列がたくさんある最初のテーブルのビューを使用して、ターゲットタイプを作成しています。
SELECT YEAR(Date)
, MONTH(Date)
, Salesperson
, Quantity
, CASE WHEN Manufacturer IN ('Tap Ltd','Hats Inc') AND Product_Type = 'Hats' THEN True ELSE False END AS IsType1
, CASE WHEN Manufacturer = 'Hats Inc' AND Product_Type IN ('Hats','Coats') THEN True ELSE False END AS IsType2
...
...
, CASE WHEN Manufacturer IN ('Tap Ltd','Hats Inc') AND Product_Type = 'Hats' THEN True ELSE False END AS IsType24
, CASE WHEN Manufacturer IN ('Tap Ltd','Hats Inc') AND Product_Type = 'Hats' THEN True ELSE False END AS IsType25
FROM SalesTable
WHERE [some stuff here]
これは読み取り/デバッグするのが恐ろしいです、そして私はそれを嫌います!!
私はこれを単純化するいくつかの異なる方法を試しましたが、それを機能させることができませんでした。私が最も近いのは、各フィールドの値とタイプ番号を含むタイプの定義を保持する3番目のテーブルを用意することです。これをテーブルに結合して完全な値を取得できますが、方法がわかりません。各フィールドの複数の値に対処します。
最後に質問:
これを行うための標準的な方法、またはターゲットのタイプごとに1つの列以外のより簡単でわかりやすい方法はありますか?
これは複雑な問題だと思いますので、不明な点がありましたらお知らせください。
編集-私が取得する必要があるもの:
プロセスの最後に、実際の売上でターゲットを表示する必要があります。
Type Year Month Salesperson TargetQty ActualQty
2 2012 8 James 2000 2809
2 2012 9 Ian 6500 6251
販売テーブルの各行は、8つのタイプを満たす可能性があります。
さらにいくつかのポイント:
- ターゲットに対して定義する必要がある(または任意の値を含めるためにNULLに設定する)必要がある5つの異なる列があります
- 定義する必要のある30から40の異なるタイプがあり、いくつかの列には10もの異なる値が含まれる可能性があります
ポイント2の場合、値の順列ごとに1つの行を使用している場合、それぞれ10の値を持つ2つの列を使用すると、毎月の営業担当者ごとに100行になりますが、これが複数の値を定義する唯一の方法である場合は、これを行う必要があります。
これが意味をなさない場合は申し訳ありません!