czw30row 2021-11-12 17:05 采纳率: 50%
浏览 35
已结题

仓库通过出入库统计库存,显示结果需按商品、日期、出入库类型分组、上次库存、出入库数量、现库存

建立数据库,插入数据


USE [DBTEST]
GO
/****** Object:  Table [dbo].[TB_ORDER]    Script Date: 2021/11/12 16:53:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TB_ORDER](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ORDER_ID] [nvarchar](50) NULL,
    [COMM_NAME] [nvarchar](50) NULL,
    [ORDER_DATE] [datetime] NULL,
    [ORDER_TYPE] [nvarchar](50) NULL,
    [QTY_IN] [int] NULL,
    [QTY_OUT] [int] NULL,
 CONSTRAINT [PK_ORDER] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[TB_ORDER] ON 
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (1, NULL, N'A', CAST(N'2021-11-10T00:00:00.000' AS DateTime), N'IN', 10, NULL)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (2, NULL, N'A', CAST(N'2021-11-10T00:00:00.000' AS DateTime), N'IN', 50, NULL)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (3, NULL, N'A', CAST(N'2021-11-10T00:00:00.000' AS DateTime), N'OUT', NULL, 20)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (4, NULL, N'B', CAST(N'2021-11-11T00:00:00.000' AS DateTime), N'IN', 20, NULL)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (5, NULL, N'B', CAST(N'2021-11-11T00:00:00.000' AS DateTime), N'OUT', NULL, 10)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (6, NULL, N'B', CAST(N'2021-11-11T00:00:00.000' AS DateTime), N'OUT', NULL, 10)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (7, NULL, N'A', CAST(N'2021-11-11T00:00:00.000' AS DateTime), N'IN', 10, NULL)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (8, NULL, N'A', CAST(N'2021-11-10T00:00:00.000' AS DateTime), N'PUT', 20, NULL)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (9, NULL, N'A', CAST(N'2021-11-10T00:00:00.000' AS DateTime), N'PUSH', NULL, 10)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (10, NULL, N'C', CAST(N'2021-11-09T00:00:00.000' AS DateTime), N'IN', 50, NULL)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (11, NULL, N'C', CAST(N'2021-11-11T00:00:00.000' AS DateTime), N'OUT', NULL, 10)
GO
INSERT [dbo].[TB_ORDER] ([ID], [ORDER_ID], [COMM_NAME], [ORDER_DATE], [ORDER_TYPE], [QTY_IN], [QTY_OUT]) VALUES (12, NULL, N'A', CAST(N'2021-11-10T00:00:00.000' AS DateTime), N'OUT', NULL, 10)
GO
SET IDENTITY_INSERT [dbo].[TB_ORDER] OFF
GO

进行结果查询

SELECT COMM_NAME,ORDER_DATE,ORDER_TYPE,
LAG((SELECT SUM(ISNULL(QTY_IN,0))-SUM(ISNULL(QTY_OUT,0)) FROM TB_ORDER A WHERE A.ORDER_DATE <= B.ORDER_DATE AND A.ORDER_TYPE<=B.ORDER_TYPE AND A.COMM_NAME = B.COMM_NAME))OVER (PARTITION BY COMM_NAME  ORDER BY COMM_NAME) AS BEG_QTY,
SUM(ISNULL(QTY_IN,0)-ISNULL(QTY_OUT,0)) AS QTY,
(SELECT SUM(ISNULL(QTY_IN,0))-SUM(ISNULL(QTY_OUT,0)) FROM TB_ORDER A WHERE A.ORDER_DATE <= B.ORDER_DATE AND A.ORDER_TYPE<=B.ORDER_TYPE AND A.COMM_NAME = B.COMM_NAME GROUP BY COMM_NAME)AS END_QTY
FROM TB_ORDER B
GROUP BY COMM_NAME,ORDER_DATE,ORDER_TYPE
ORDER BY COMM_NAME,ORDER_DATE ASC

img

求看看,或者换种方法获取库存

  • 写回答

2条回答 默认 最新

  • CSDN专家-文盲老顾 2021-11-12 17:27
    关注
    
    ;with t as (
        select *,ROW_NUMBER() over(partition by comm_name order by id) as nid 
        from [dbo].[TB_ORDER]
    ),t1 as (
        select *,0 as BEG_QTY,ISNULL(QTY_IN,0)-ISNULL(QTY_OUT,0) as QTY,ISNULL(QTY_IN,0)-ISNULL(QTY_OUT,0) as END_QTY from t where nid=1
        union all
        select b.*,a.END_QTY,ISNULL(b.QTY_IN,0)-ISNULL(b.QTY_OUT,0),a.END_QTY+ISNULL(b.QTY_IN,0)-ISNULL(b.QTY_OUT,0) from t1 a,t b where a.nid=b.nid-1 and a.COMM_NAME=b.COMM_NAME
    )
    select * from t1
    order by COMM_NAME,ID
    

    img

    你是要这样的结果?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月23日
  • 已采纳回答 11月15日
  • 创建了问题 11月12日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料