代码之家  ›  专栏  ›  技术社区  ›  DJB

SQL查找所有订单,但删除与升级订单相关的取消订单

  •  0
  • DJB  · 技术社区  · 12 年前

    目前真的很难解决,因为这是我试图在SQL中做的事情,但我知道应该用另一种语言(如PHP)来做。

    基本上,我拥有的是一个数据库,其中包含订单号和与政策相关的产品代码。

    对于一些订单,有多个阶段,如取消和升级(例如,当进行升级时,原始策略被取消,然后针对差异进行升级)

    我想做的是运行一个查询 排除 所有与升级订单相关的取消(在产品代码中指定为UP),但保留所有与细节更改相关的取消。

    简而言之; 该查询需要查找包括取消订单在内的所有订单,然后删除与UP具有相同订单号的任何取消订单。

    我知道这基本上可以通过“foreach”来完成,它可以找到所有UP产品代码和相关订单号,然后删除与该订单号相关的所有取消订单-但我不知道如何在SQL中实现这一点,而不临时创建多个表,然后删除它们。

    表格结构如下:

    | Order Number | Product Code | Transaction Value |
    |    1         |    RRCN      |    -30            |
    |    1         |    RRUP      |     12            |
    |    2         |    SMFP      |     30            |
    |    3         |    SMCN      |    -12            |
    |    3         |    SMCD      |     12            |
    |    4         |    HUCN      |    -30            |
    

    因此,我需要查询来显示所有的表,但要删除与RRUP相关的RRCN。因此,查询应该查找RRUP,查看它是订单1,然后找到与订单1相关的RRCN,并将其从结果中删除-请注意,结果不是原始表。

    有什么想法吗?非常感谢!(我正在运行SQL Server 2008)

    1 回复  |  直到 12 年前
        1
  •  0
  •   Krishna Gupta    12 年前

    此查询应完成以下工作:

    SELECT * FROM Q19427600
    WHERE RIGHT(ProductCode,2) <> 'CN'
    OR (RIGHT(ProductCode,2) = 'CN' AND 
        OrderNumber NOT IN (SELECT OrderNumber FROM Q19427600 WHERE RIGHT(ProductCode,2) = 'UP'));
    

    返回结果:

    OrderNumber ProductCode TransactionValue
    1           RRUP        12
    2           SMFP        30
    3           SMCN        -12
    3           SMCD        12
    4           HUCN        -30