0

我已经在网上搜索并无法提出解决方案。我感谢提供的任何帮助。

我有一张包含这些值的表格,等等。

Item Charge No  Item Ledger Entry No    IsReceivedInFull
--------------------------------------------------------
Ocean Freight   1525593
Factory Cost    1525593
Overhead        1525593
Factory Cost    1525593
Fee             1525593
Duty            1525593
Landing Freight 1525593

我正在尝试遍历我的结果以检查每个项目分类帐条目是否我的表中有这五个组件;“海运”、“工厂成本”、“费用”、“关税”和“陆运”。如果一个单独的项目分类帐条目号至少有五行,每个上述项目费用号都有一个,那么我想将“IsReceivedInFull”设置为“是”

我来自 ABAP 编程背景,知道这可以通过几个 LOOP 语句轻松完成,但我是 T-SQL 新手,一直在努力解决这个简单的问题。请帮忙。

4

1 回答 1

0

你可以试试这个:

UPDATE mytable tgt
SET    tgt.isreceivedinfull="Yes"
WHERE  tgt.isreceivedinfull is null and
       exists(SELECT src.item_ledger_Entry_no, count(*) 
              FROM   mytable src
              WHERE  src.item_ledger_entry_no = tgt.item_ledger_entry_no  
                     and src.item_charge_no in ("Ocean Freight", 
                                                "Factory Cost", 
                                                "Fee", 
                                                "Duty", 
                                                "Landing Freight")
                    group by src.item_ledger_entry_no
                    having count(*) >= 5)

您可能必须根据您的数据库类型调整字符串文字(“或'),以及字段名称和表名称,因为它们在您的示例中不可用。

那应该行得通。

解释:如果子选择的结果是非空记录集(意味着多于一行),则存在条件将为真。通过在子选择的 where 子句中使用 tgt.item_ledger_entry_no,如果此特定项目具有您要查找的 5 个条目,您将只获得非空值。说到这里,它还将为所有具有相同 ID 但其中一个不在您的列表中的行设置“是”(名为“开销”)。并且因为您有重复的行(名为“Factory Cost”的行有两次),所以有条件设置为大于或等于。

希望有帮助

丹尼尔

于 2012-10-03T15:16:19.520 回答