【发布时间】:2014-05-10 03:57:46
【问题描述】:
我必须在 SQL Server 2008 中为我的系统创建一个生产报告,其中包括按日期和按员工/按流程分组,以及发出/接收它的期初和期末数量/个。
这是我的 SQL Server 表结构:
CREATE TABLE [dbo].[PROD_SUM](
[ID] [int] IDENTITY(1,1) NOT NULL,
[TRANS_DATE] [date] NOT NULL,
[TRANS_FLAG] [varchar](1) NULL, // contains 'I'->Issue Or 'R' ->Receive
[EMP_ID] [smallint] NULL,
[PROC_ID] [smallint] NULL,
[DEPT_ID] [smallint] NULL,
[PCS] [smallint] NULL,
[WEIGHT] [decimal](9, 3) NULL,
[VALUE] [decimal](15, 2) NULL,
CONSTRAINT [PK_PROD_SUM] 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]
这是一些虚拟数据。
INSERT INTO [PROD_SUM]
([TRANS_DATE]
,[TRANS_FLAG]
,[EMP_ID]
,[PROC_ID]
,[DEPT_ID]
,[PCS]
,[WEIGHT]
,[VALUE])
VALUES
( '2014-May-01', 'R', 1, 1, 1, 10, 12.50, 100.00),
( '2014-May-01', 'I', 1, 1, 1, 05, 4.75, 24.00),
( '2014-May-02', 'R', 1, 1, 1, 14, 14.50, 140.00),
( '2014-May-02', 'I', 1, 1, 1, 02, 2.47, 12.00),
( '2014-May-03', 'R', 1, 1, 1, 01, 1.22, 10.00)
GO
现在有了上面的示例数据,我需要“2014 年 5 月 2 日”和“2014 年 5 月 3 日”期间的报告,开盘和收盘的日期列表如下。
02-05-2014 03-05-2014
---------------------------------- -------------------------------
Emp_Id | Proc_id | Unit | Opening Receive Issue Closing | Opening Receive Issue Closing
---------------------------------------------------------------------------------------------
1 1 Pcs 05 14 2 17 17 1 0 18
Wgt. 7.75 14.5 2.47 19.78 19.78 1.22 0 21.00
Val. 76.00 140.00 12.00 204.00 204.00 10.00 0 214.00
在这里您可以看到我在报告中添加了一个新列作为“单位”,其中包括 Pcs、Weight 和 value。并且第一个日期的开始列应该是计算开始值(例如,接收减去以前日期的问题(2014 年 5 月 2 日之前))。期末字段应该是Opening + receive - Issue,并且这个期末值应该在下一个日期作为期初值结转。
此表大约有 10k 行,因此在生成报告时必须考虑性能。我使用 SQL Server 2008 作为数据库,现在我没有使用它的报告服务。因此,如果报告服务中有更好的选择,请告诉我。因为我以前从未使用过报告服务。
谢谢。
【问题讨论】:
-
到目前为止你尝试过什么?您在 TRANS_FLAG 中只有 I 和 R 标志,但在输出中有打开、接收、关闭和问题列。
-
@BoratSagdiyev,我想要按 TRANS_FLAG 字段分组的 Pcs、Weight 和 value 的总和,并且应该计算打开和关闭。开盘将是前几天的收盘(除了第一个日期,第一个日期应该是报告开始日期之前的字段总和),收盘将是开盘+接收问题。
标签: sql sql-server sql-server-2008 reporting-services cumulative-sum