我有一张包含销售数据的大表,下面是有用的数据:
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
销售表的每一行都可能满足其中的8种类型。
更多要点:
对于第2点,如果我为每个值的排列使用一行,那么每列10个值的2列将为每个销售人员提供每行100行,这是很多但是如果这是定义的唯一方法多个值我将不得不这样做。
对不起,如果没有意义的话!
答案 0 :(得分:1)
如果我是正确的,目标表中的“Target_Type”字段基于Manufacturer和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
这应该通过为每种可能性设置一行来解决“每个字段的多个值”问题。