Sql 在另一个表中存储一组条件
我有一个包含销售数据的大表,下面是有用的数据:Sql 在另一个表中存储一组条件,sql,sql-server,sql-server-2008,tsql,join,Sql,Sql Server,Sql Server 2008,Tsql,Join,我有一个包含销售数据的大表,下面是有用的数据: 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
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种类型
还有几点:
以获得您的目标类型值:
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
这应该解决“每个字段都有多个值”的问题,为每个可能性设置一行 如果我认为目标表中的“目标类型”字段基于制造商和产品类型是正确的,那么您可以创建一个如下所示的目标类型表,并在制造商和产品类型上加入以获得您的目标类型值:
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
这应该解决“每个字段都有多个值”的问题,为每个可能性设置一行 你能提供更多的信息吗?目标类型由制造商列表和单一产品类型定义?听起来第三个(目标类型定义)表是这里的正确选择。使用它到底有什么问题?使用另一个表时的问题是,当一个或多个字段需要多个项时,我通常会在('X','X')
中使用,但我不知道如何对联接执行此操作。请看@Ojen answer。您可以从SalesTable内部选择*并根据制造商和产品类型连接此表。这样就可以得到TargetType。看起来这实际上是一个如何设计“实际销售目标”表的问题。看起来销售人员只有一个TargetQty和一个ActualQty,而且这些数量并不特定于目标类型。所以真正的问题是:您应该有一个单独的字段作为目标类型的分隔列表,还是应该有30个isTypeX列。准确吗?此外,TargetType是基于销售人员(例如,Ian交易类型1、2和4)还是基于实际销售(Ian本月销售类型1、4和6)?销售人员有几种不同的类型(Ian交易类型1、2和4),每种类型都有一个单独的目标编号,不止一个人可以拥有相同的目标类型,并且一笔交易可以计入一个或多个销售人员,我认为这是很难正确处理的原因。你能提供更多信息吗?目标类型由制造商列表和单一产品类型定义?听起来第三个(目标类型定义)表是这里的正确选择。使用它到底有什么问题?使用另一个表时的问题是,当一个或多个字段需要多个项时,我通常会在('X','X')
中使用,但我不知道如何对联接执行此操作。请看@Ojen answer。您可以从SalesTable内部选择*并根据制造商和产品类型连接此表。这样就可以得到TargetType。看起来这实际上是一个如何设计“实际销售目标”表的问题。看起来销售人员只有一个TargetQty和一个ActualQty,而且这些数量并不特定于目标类型。所以真正的问题是:您应该有一个单独的字段作为目标类型的分隔列表,还是应该有30个isTypeX列。准确吗?此外,TargetType是基于销售人员(例如,Ian交易类型1、2和4)还是基于实际销售(Ian本月销售类型1、4和6)?销售人员有几种不同的类型(Ian交易类型1、2和4),每种类型都有一个单独的目标编号,不止一个人可以拥有相同的目标类型,并且一笔交易可以计入一个或多个销售人员,我认为这是很难做到正确的原因。这似乎很有希望,尽管一笔销售交易可能会满足多个目标类型
,这是否只需要对同一个表进行多个联接?@bendataclear您希望最终数据是什么样的?现在,您的“目标表”只有一列来标识“目标类型”。在“目标表”中,每一行是一个事务,还是一个事务可能有两行