复杂SQL请求

问题描述 投票:0回答:1

我的sql数据库中有一个具有这种结构的表

enter image description here

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”的“ Unsold”数量的总和添加新列

2-为基于此公式计算的名为“ Sold_qty”的“已售出”数量总和添加另一列=>已售出数量=交付数量-缺失数量-未售出数量

如何修改脚本以创建这两个新列?

我需要的结果是这样的:

enter image description here

PS:别忘了我在脚本中的“ where”条件只考虑了缺少的数量(Where FeedbackType ='MISSING')=>要执行我现在需要的操作,我想我们需要更改此“ where”条件或也许在其他地方有条件的地方再做一个。

提前感谢您的帮助!

我在sql数据库中有一个具有这种结构的表USE [XXXXX] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo]。[销售]([Id] [uniqueidentifier] ...] >

sql sql-server sql-server-2008 sql-server-2012
1个回答
0
投票

这称为条件聚合。

一种方法是将CASE移动到SUM内。

© www.soinside.com 2019 - 2024. All rights reserved.