Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在另一个表中存储一组条件_Sql_Sql Server_Sql Server 2008_Tsql_Join - Fatal编程技术网

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种类型

还有几点:

  • 我有5个不同的列需要根据目标定义(或设置为NULL以包含任何值)
  • 我有30到40种不同的类型需要定义,其中几个列可以包含多达10个不同的值
  • 对于第2点,如果我对每个值的排列使用一行,那么2列(每个列有10个值)将为每个销售人员每个月提供100行,这是很多,但是如果这是定义多个值的唯一方法,我必须这样做

    对不起,如果这没有意义

    如果我认为目标表中的“目标类型”字段基于制造商和产品类型是正确的,那么您可以创建一个如下所示的目标类型表,并在制造商和产品类型上加入
    以获得您的目标类型值:

    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您希望最终数据是什么样的?现在,您的“目标表”只有一列来标识“目标类型”。在“目标表”中,每一行是一个事务,还是一个事务可能有两行