gpt4 book ai didi

sql-server - 如何在 SELECT 中排除相同的行

转载 作者:行者123 更新时间:2023-12-03 11:27:59 25 4
gpt4 key购买 nike

我有这个脚本可以创建一个表并存储销售订单信息。其背后的场景是,一旦将项目添加到销售订单中,它的 Status'A' 表示 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');

关于sql-server - 如何在 SELECT 中排除相同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com