目前真的很难,因为这是我在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)
答案 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