0

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

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

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

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

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

我知道这基本上可以通过查找所有 UP 产品代码和相关订单号的“foreach”来完成,然后删除与该订单号相关的所有取消 - 但我不知道如何在 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)

4

1 回答 1

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
于 2013-10-17T15:05:19.693 回答