【发布时间】:2020-04-30 04:10:07
【问题描述】:
我的 sql 数据库中有一个具有这种结构的表
USE [XXXXX]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Sales](
[Id] [uniqueidentifier] NOT NULL,
[PoSId] [varchar](50) NOT NULL,
[EditorCode] [varchar](10) NOT NULL,
[ProductCode] [varchar](10) NOT NULL,
[EditionCode] [varchar](10) NOT NULL,
[IssueDate] [date] NOT NULL,
[FeedbackType] [varchar](50) NOT NULL,
[FeedbackRef] [varchar](50) NOT NULL,
[Quantity] [int] NOT NULL,
[CreationTime] [datetime] NOT NULL,
[ModificationTime] [datetime] NOT NULL,
CONSTRAINT [PK_Sales] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
FeedbackType”属性接受 4 个潜在值:“DELIVERY”、“RESTOCKING”、“MISSING”、“UNSOLD”
我创建了一个 sql 脚本,它为我提供了专用 pointOfSale、productCode、versionCode 和发行日期的缺失数量总和。
SELECT [PoSId]
,[ProductCode]
,[EditionCode]
,[IssueDate]
, CASE WHEN Quantity < 0 THEN Quantity * -1 ELSE Quantity END AS QuantityMissing
FROM (
SELECT [PoSId]
,[ProductCode]
,[EditionCode]
,[IssueDate]
,SUM([Quantity]) AS Quantity
FROM [xxxxxxx].[dbo].[Sales]
Where FeedbackType='MISSING' and IssueDate < '2019-12-18'
AND CreationTime < '2019-12-19'
GROUP BY [PoSId]
,[ProductCode]
,[EditionCode]
,[IssueDate]
) T
ORDER by IssueDate
到目前为止,脚本可以满足我的需要(为缺失的数量添加一列)
现在,我需要修改这个脚本来做到这一点:
1- 为“未售出”数量的总和添加一个名为“Unsold_qty”的新列
2- 为“已售”数量的总和添加另一列,名为“Sold_qty”,根据此公式计算 => 已售数量 = 交付数量 - 缺失数量 - 未售出数量
如何修改我的脚本以创建这两个新列?
我需要的结果是这样的:
PS:不要忘记我在这个脚本中的“where”条件只考虑了缺失的数量(Where FeedbackType='MISSING')=> 做我现在需要的我想我们需要改变这个“where”条件或者可能在其他任何地方做另一个 where 条件。
提前感谢您的帮助!
【问题讨论】:
-
轻松为您提供帮助:minimal reproducible example
标签: sql sql-server sql-server-2008 sql-server-2012