sql-server - 如何在 SELECT 中排除相同的行
问题描述
我有这个脚本,它创建一个表并存储销售订单信息。它背后的场景是,一旦将 Item 添加到 Sale Order 中,它Status
就是'A'
mean Add
。后来不知何故,客户希望删除该项目,因此我们添加了一个具有相同详细信息但Status
作为'D'
手段的新行Delete
。现在,我只想获取活动的销售订单项目,这些项目不应该包括该项目,Added
然后Removed
是订单。这是我的脚本。
CREATE TABLE [dbo].[SALE_DETAIL](
[ORDER_NUMBER] [varchar](50) NULL,
[ITEM_NAME] [varchar](250) NULL,
[QUANTITY] [int] NULL,
[PRICE] [numeric](18, 0) NULL,
[Status] [varchar](50) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[SALE_DETAIL] ([ORDER_NUMBER], [ITEM_NAME], [QUANTITY], [PRICE], [Status]) VALUES (N'SO-100-ORD-19', N'Double Bed', 5, CAST(70000 AS Numeric(18, 0)), N'A')
GO
INSERT [dbo].[SALE_DETAIL] ([ORDER_NUMBER], [ITEM_NAME], [QUANTITY], [PRICE], [Status]) VALUES (N'SO-100-ORD-19', N'Sofa', 5, CAST(10000 AS Numeric(18, 0)), N'A')
GO
INSERT [dbo].[SALE_DETAIL] ([ORDER_NUMBER], [ITEM_NAME], [QUANTITY], [PRICE], [Status]) VALUES (N'SO-100-ORD-19', N'Dining Table', 1, CAST(50000 AS Numeric(18, 0)), N'A')
GO
INSERT [dbo].[SALE_DETAIL] ([ORDER_NUMBER], [ITEM_NAME], [QUANTITY], [PRICE], [Status]) VALUES (N'SO-100-ORD-19', N'Sofa', 5, CAST(10000 AS Numeric(18, 0)), N'D')
GO
我正在寻找的预期输出应该是这样的,因为 Item'Sofa'
已从 Order 中取消。
ORDER_NUMBER ITEM_NAME QTY PRICE
SO-100-ORD-19 Dining Table 1 50000
SO-100-ORD-19 Double Bed 5 70000
询问:
SELECT ORDER_NUMBER, ITEM_NAME, QUANTITY, PRICE FROM [dbo].[SALE_DETAIL]
WHERE Status <> 'D'
GROUP BY ORDER_NUMBER, ITEM_NAME, QUANTITY, PRICE
解决方案
我会使用NOT EXISTS
:
SELECT SD.ORDER_NUMBER,
SD.ITEM_NAME,
SD.QUANTITY,
SD.PRICE
FROM dbo.[SALE_DETAIL] SD
WHERE NOT EXISTS (SELECT 1
FROM dbo.[SALE_DETAIL] e
WHERE e.ORDER_NUMBER = SD.ORDER_NUMBER
AND e.ITEM_NAME = SD.ITEM_NAME
AND e.[Status] = 'D');
推荐阅读
- logging - rust - 将环境变量加载到 log4rs yml 文件中
- flutter - Flutter 一页有两个滚动条
- angular - 如何编写用于部署我的 Angular 通用应用程序的 bitbucket 管道?
- reactjs - lodash/debounce 的最小值和最大值是多少
- java - 打印方向java
- c# - 使用 Angular 8 前端跟踪从 .Net Core 上传的 Amazon S3 存储桶文件
- javascript - TypeError:date.getTime 不是函数
- node.js - 如何修改 AWS Lambda Node.js 代码以过滤来自 AWS Cloudwatch 的日志
- java - TinkerPop Gremlin How to serealize Predicate 传入直到步骤
- json - 将此 JSON 转换为 Dart 类所需的 Dart 代码是什么