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]

这很难阅读/调试,我讨厌它

我尝试了几种不同的方法来简化它,但无法让它发挥作用。我最接近的是有第三个表来保存类型的定义,其中包含每个字段的值和类型号,这可以连接到表中给我完整的值,但我想不出办法处理每个字段的多个值。

最后的问题:

有没有一种标准的方法可以做到这一点,或者除了每种目标类型的一列之外,还有一种更简单/更整洁的方法吗?

我知道这是一个复杂的问题,所以如果有任何不清楚的地方,请告诉我。

编辑 - 我需要得到什么:

在流程的最后,我需要显示实际销售额的目标:

Type    Year    Month   Salesperson   TargetQty   ActualQty
2       2012    8       James         2000        2809
2       2012    9       Ian           6500        6251

sales 表的每一行都可能满足 8 种类型。

还有几点:

  1. 我有 5 个不同的列需要针对目标定义(或设置为 NULL 以包含任何值)
  2. 我有 30 到 40 种不同类型需要定义,其中几列可能包含多达 10 个不同的值

对于第 2 点,如果我为每个值的排列使用一行,则每列有 10 个值的 2 列将为每个月的每个销售人员提供 100 行,但如果这是定义多个值的唯一方法,我将不得不这样做。

对不起,如果这没有意义!

4

1 回答 1

1

如果我认为目标表中的“Target_Type”字段基于制造商和 Product_Type 是正确的,那么您可以创建一个如下所示的 TargetType 表以及JOIN制造商和 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 回答