我有一个包含销售数据的大表,有用的数据如下:
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 种类型。
还有几点:
- 我有 5 个不同的列需要针对目标定义(或设置为 NULL 以包含任何值)
- 我有 30 到 40 种不同类型需要定义,其中几列可能包含多达 10 个不同的值
对于第 2 点,如果我为每个值的排列使用一行,则每列有 10 个值的 2 列将为每个月的每个销售人员提供 100 行,但如果这是定义多个值的唯一方法,我将不得不这样做。
对不起,如果这没有意义!