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

时间:2013-10-17 13:07:00

标签: sql sql-server foreach orders

目前真的很难,因为这是我在SQL中尝试做的事情,但我知道应该使用其他语言,例如PHP。

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

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

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

总之; 查询将需要查找所有订单,包括取消,但随后删除任何与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 个答案:

答案 0 :(得分:0)

此查询应该完成这项工作:

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