如何在 SQL 任何地方满足 "where" 条件时 return 一组行

How to return a group of rows when one row meets "where" criteria in SQL Anywhere

我有点不知所措,因为我现在只使用 SQL 3 天,但我已经喜欢通过 MS 查询增加的功能。对 IN 函数的需求促使我了解了这一点,我感谢社区提供的信息帮助我学习了这一点。

我尝试查看其他问题,但找不到旨在对两行以上的行进行分组或对不同数量的行进行分组的问题。这意味着 count 和 duplicate 都不能作为选项。

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

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

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

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

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

预先感谢您的帮助和/或批评 -Cody

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

(抱歉缺少格式)。

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

    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)

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

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

感谢 Mischa 让我到达那里!