【问题标题】:How to return a group of rows when one row meets "where" criteria in SQL Anywhere当一行满足 SQL Anywhere 中的“where”条件时如何返回一组行
【发布时间】:2017-04-29 05:55:54
【问题描述】:

我对我正在尝试做的事情有点不知所措,因为我现在只使用 SQL 3 天,但我已经喜欢 MS 查询增加的功能。对 IN 功能的需求是促使我了解这一点的原因,我感谢社区提供的信息,帮助我完成学习。

我尝试查看其他问题,但找不到一个意图将超过两行分组或将不同数量的行分组的问题。这意味着计数和重复都可以作为选项。

我正在分析一个跨越多个商店位置的零件编号信息表。该表为零件号的每个实例提供了一行,因此如果所有 15 家商店都有给定零件号的某种历史记录,则该零件号在表中将有 15 行。

我想查看其他商店的历史记录,以查找符合我所在位置销售历史记录为 0 标准的零件。目的是看看它们是否可以转移到另一家商店,而不是退回给供应商并产生补货费用。

这是表格的简化版本,按照我希望输出的结构化方式进行组织。我通过怀疑零件号并将它们的列表用作 IN() 中的文本字符串来到达这里,但我想以另一种方式进行此操作,并根据此表中的销售数据构建零件号列表。

Branch| Part_No| Description|  Bin Qty|current 12 mo sales|previous 12 mo sales|
------|--------|------------|---------|-------------------|--------------------|
20     CA38385   SUPPORT        2       1                   1
23     CA38385   SUPPORT        1       0                   0
25     CA38385   SUPPORT        0       0                   1

20     DFC10513   Hdw Kit       0       1                   0
23     DFC10513   Hdw Kit       1       0                   0
07     DFC10513   Hdw Kit       0       1                   0

3      D59096     VALVE         0       0                  12
5      D59096     VALVE         0       0                   4
6      D59096     VALVE         4       6                  12
8      D59096     VALVE         0       0                   0
33     D59096     VALVE        11      14                  18
21     D59096     VALVE         4       4                   4
22     D59096     VALVE         0       0                   0
23     D59096     VALVE        10       0                   0
24     D59096     VALVE         0       0                   0
25     D59096     VALVE         0       0                   0
26     D59096     VALVE         2       2                   0

1      TE67401  Repair Kit      1       1                   2
21     TE67401  REPAIR KIT      1       3                   0
22     TE67401  REPAIR KIT      0       1                   0

我是 23 号分支,所以据我所知,查询的开始是

Select * from part_information
Group By part_number
Having IN(Branch) 23 and bin qty > 0 and current_12_mo_sales=0 and previous_12_mo_sales = 0

你能指出我正确的方向吗?这张桌子大约有。 200000 行,所以我真的需要学习如何做到这一点。我真的没有找到更好的方法。

提前感谢您的帮助和/或批评 -Cody

【问题讨论】:

    标签: where having sqlanywhere where-in


    【解决方案1】:

    Select * from part_information where part_number not in ( select part_number from part_information where branch = 23 and bin_qty > 0 -- etc... )

    (抱歉没有格式化)。

    【讨论】:

    • 我没有想到这种方法,但我发现了一个问题。对于满足这些条件的任何部分,我想在输出中包含分支 23 的行。这样我就可以看到其他详细信息,例如我的 bin 数量、库存成本,以及整个表中近 200 列中的任何其他列。我尽可能地简化了表格,以便在仍然显示数据集的同时传达我的需求。如果表格真的像我第一次发布的那样简单,那么通过您的方法,我可以根据我的标准假设所有这些值。
    • 不确定我是否完全理解,但是添加or branch = 35 and... 怎么样?
    • 感谢您抽出宝贵时间与我讨论这个问题。对此,我真的非常感激。让我看看我能不能简明扼要地说出我想写的查询。
    • 查询的第一部分只是我对销售或库存等的规定,但第二部分是让我失望的。在我的 Where 或 having 语句选择符合我的条件的行之后,我希望它返回包含相同部件号的所有行(多于 0 到 14 行之间)。我希望这一直持续到表格的末尾,找到所有“Where”匹配项,并在零件编号列中使用相同的“零件编号”文本字符串拉入表格中的其余行。
    • 写出来给了我一个想法。我将研究如何使用子查询,但我认为如果我编写一个(内部或子)查询,只为每个零件号选择一行,我应该能够在父查询中使用该输出来返回任何具有值的行'IN' 我的子查询的输出。这听起来可行吗?
    【解决方案2】:

    这最终以我想要的方式工作

        SELECT pi_Branch, pi_Franchise, pi_Part_No, pi_Description, pi_Bin_Qty,
               pi_Bin, pi_current_12_mo_sales, pi_previous_12_mo_sales, pi_Inventory_Cost, 
               pi_Return_Indicator 
        From Part_Information
                 Where pi_Part_No IN (Select pi_Part_No
                                      From Part_Information
                                      Where pi_Branch=23 And 
                                      pi_Bin_Qty>0 And pi_current_12_mo_sales<=0 
                                      And pi_previous_12_mo_sales<=0)
    

    我在想这一定是一个复杂的过程,但实际上,只需要两个简单的查询。

    我仍然对任何人对更好或更有效的处理方式的意见感兴趣。

    感谢米莎带我到那里!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多