1

私は売上データ、以下の有用なデータを含む大きなテーブルを持っています:

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つのタイプを満たす可能性があります。

さらにいくつかのポイント:

  1. ターゲットに対して定義する必要がある(または任意の値を含めるためにNULLに設定する)必要がある5つの異なる列があります
  2. 定義する必要のある30から40の異なるタイプがあり、いくつかの列には10もの異なる値が含まれる可能性があります

ポイント2の場合、値の順列ごとに1つの行を使用している場合、それぞれ10の値を持つ2つの列を使用すると、毎月の営業担当者ごとに100行になりますが、これが複数の値を定義する唯一の方法である場合は、これを行う必要があります。

これが意味をなさない場合は申し訳ありません!

4

1 に答える 1

1

ターゲットテーブルの「Target_Type」フィールドがManufacturerとProduct_Typeに基づいていると私が正しければ、以下のようなTargetTypeテーブルを作成し、JOINManufacturerとProduct_Typeに基づいてTarget_Type_Valueを取得できます。

ID   Product_Type    Manufacturer   Target_Type_Value
1    Taps            Tap Ltd        1
2    Hats            Hats Inc       2
3    Coats           Hats Inc       2
4    Hats            Caps Inc       3
5    Pencils         ABC Ltd        6

これは、可能性ごとに行を作成することにより、「各フィールドの複数の値」の問題に対処する必要があります。

于 2012-09-04T16:25:59.960 に答える