Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 窗口分区函数需要帮助_Sql_Sql Server - Fatal编程技术网

Sql 窗口分区函数需要帮助

Sql 窗口分区函数需要帮助,sql,sql-server,Sql,Sql Server,我有一个包含本年度所有薪酬记录的数据集。我想加上一年和一个月,希望不必分别求和,然后加入结果。以下是我的数据: CREATE TABLE [dbo].[_Test]( [Id] [int] IDENTITY(1,1) NOT NULL, [EmployeeID] [nvarchar](30) NULL, [CheckDate] [date] NULL, [Units] [decimal](19, 5) NULL, [Rate] [decimal](19,

我有一个包含本年度所有薪酬记录的数据集。我想加上一年和一个月,希望不必分别求和,然后加入结果。以下是我的数据:

CREATE TABLE [dbo].[_Test](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [EmployeeID] [nvarchar](30) NULL,
    [CheckDate] [date] NULL,
    [Units] [decimal](19, 5) NULL,
    [Rate] [decimal](19, 5) NULL,
    [Amount] [decimal](19, 5) NULL,
    [TaxAmount] [decimal](19, 5) NULL,
    [DeductAmount] [decimal](19, 5) NULL,
    [BenefitAmount] [decimal](19, 5) NULL
) ON [PRIMARY]

GO
SET IDENTITY_INSERT [dbo].[_Test] ON 

GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (1, N'1', CAST(N'2015-01-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (2, N'2', CAST(N'2015-01-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (3, N'1', CAST(N'2015-02-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (4, N'2', CAST(N'2015-02-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (5, N'1', CAST(N'2015-03-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (6, N'2', CAST(N'2015-03-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (7, N'1', CAST(N'2015-04-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (8, N'2', CAST(N'2015-04-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (9, N'1', CAST(N'2015-05-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (10, N'2', CAST(N'2015-05-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (11, N'1', CAST(N'2015-06-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (12, N'2', CAST(N'2015-06-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (13, N'1', CAST(N'2015-07-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (14, N'2', CAST(N'2015-07-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (15, N'1', CAST(N'2015-08-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (16, N'2', CAST(N'2015-08-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (17, N'1', CAST(N'2015-09-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (18, N'2', CAST(N'2015-09-01' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (19, N'1', CAST(N'2015-01-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (20, N'2', CAST(N'2015-01-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (21, N'1', CAST(N'2015-02-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (22, N'2', CAST(N'2015-02-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (23, N'1', CAST(N'2015-03-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (24, N'2', CAST(N'2015-03-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (25, N'1', CAST(N'2015-04-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (26, N'2', CAST(N'2015-04-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (27, N'1', CAST(N'2015-05-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (28, N'2', CAST(N'2015-05-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (29, N'1', CAST(N'2015-06-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (30, N'2', CAST(N'2015-06-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (31, N'1', CAST(N'2015-07-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (32, N'1', CAST(N'2015-08-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(10.00000 AS Decimal(19, 5)), CAST(400.00000 AS Decimal(19, 5)), CAST(100.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)), CAST(50.00000 AS Decimal(19, 5)))
GO
INSERT [dbo].[_Test] ([Id], [EmployeeID], [CheckDate], [Units], [Rate], [Amount], [TaxAmount], [DeductAmount], [BenefitAmount]) VALUES (33, N'2', CAST(N'2015-08-15' AS Date), CAST(40.00000 AS Decimal(19, 5)), CAST(12.00000 AS Decimal(19, 5)), CAST(480.00000 AS Decimal(19, 5)), CAST(120.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)), CAST(60.00000 AS Decimal(19, 5)))
GO
SET IDENTITY_INSERT [dbo].[_Test] OFF
GO
我想返回工资支票的数据,以及给定一个日期时包含的月至今值和年至今值。我想这样可能行得通,但我的窗口设置有问题

select employeeid, CheckDate, Units
        sum(Units) over (Partition by employeeid, CheckDate 
                            ORDER BY CheckDate 
                            ROWS between unbounded preceding and current row) [MTD Units],

        sum(Units) over (Partition by EmployeeId, CheckDate
                            ORDER BY CheckDate 
                            ROWS between unbounded preceding and current row) [YTD Units],
        , Rate, Amount,

        sum(Amount) over (Partition by employeeid, CheckDate 
                            ORDER BY CheckDate 
                            ROWS between unbounded preceding and current row) [MTD Amount],

        sum(Amount) over (Partition by EmployeeId, CheckDate
                            ORDER BY CheckDate 
                            ROWS between unbounded preceding and current row) [YTD Amount],

from _Test
where CheckDate = '6/15/15'
我考虑使用Over的原因是可行的,因为如果我去掉WHERE子句并执行以下操作,我会得到每行上所有项目的总和

select employeeid, CheckDate, Units
        , Rate, Amount
        ,sum(Amount) over (Partition by EmployeeId) [All]
from _Test

empidCheckDate  Units   Rate    Amount  All
1   2015-01-01  40.00   10.00   400.00  6800.00
1   2015-02-01  40.00   10.00   400.00  6800.00
1   2015-03-01  40.00   10.00   400.00  6800.00
2   2015-01-15  40.00   12.00   480.00  7680.00
2   2015-02-15  40.00   12.00   480.00  7680.00
2   2015-03-15  40.00   12.00   480.00  7680.00
我在想我可以用窗户限制它

我期望的输出如下:

Id  EmpID   CheckDate   Units   MTD Units   YTD Units   Rate    Amount  MTD Amount  YTD Amount  TaxAmount   DeductAmount    BenefitAmount
29    1     2015-06-15  40.00   80.00       520.00      10.00   400.00  800.00      5200.00     100.00      50.00           50.00
30    2     2015-06-15  40.00   80.00       520.00      12.00   480.00  960.00      6240.00     120.00      60.00           60.00
有什么想法吗

谢谢


Brian

应该只需要按调整您的
分区,以在
年和/或
月之前将其分开:

select employeeid, CheckDate, Units,
    sum(Units) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Units],

    sum(Units) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Units],
    , Rate, Amount,

    sum(Amount) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Amount],

    sum(Amount) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Amount],

from _Test
这样,您创建的运行总额将被限制在适当的时间段内,您不希望将上个月的金额添加到本月的运行总额中。如果只需要特定日期的值,则在计算YTD和MTD后,需要使用子查询/cte进行筛选,因为如果将筛选器放在同一查询中,则无法使用必要的金额进行聚合:

;with cte AS (select employeeid, CheckDate, Units,
    sum(Units) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Units],

    sum(Units) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Units],
    , Rate, Amount,

    sum(Amount) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Amount],

    sum(Amount) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Amount],

    from _Test
    )
SELECT *
FROM cte
WHERE CheckDate = '6/15/15'

编辑:最初仅调整了
金额
计算,添加的
单位

只需按
调整您的
分区,按
和/或
将其分开:

select employeeid, CheckDate, Units,
    sum(Units) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Units],

    sum(Units) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Units],
    , Rate, Amount,

    sum(Amount) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Amount],

    sum(Amount) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Amount],

from _Test
这样,您创建的运行总额将被限制在适当的时间段内,您不希望将上个月的金额添加到本月的运行总额中。如果只需要特定日期的值,则在计算YTD和MTD后,需要使用子查询/cte进行筛选,因为如果将筛选器放在同一查询中,则无法使用必要的金额进行聚合:

;with cte AS (select employeeid, CheckDate, Units,
    sum(Units) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Units],

    sum(Units) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Units],
    , Rate, Amount,

    sum(Amount) over (Partition by employeeid, YEAR(CheckDate),MONTH(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [MTD Amount],

    sum(Amount) over (Partition by EmployeeId, YEAR(CheckDate)
                        ORDER BY CheckDate 
                        ROWS between unbounded preceding and current row) [YTD Amount],

    from _Test
    )
SELECT *
FROM cte
WHERE CheckDate = '6/15/15'

编辑:最初仅调整了
金额
计算,增加了
单位

您可以将标题重新格式化为问题吗?您可以将标题重新格式化为问题吗?我不能创建一个第一季度窗口,例如,包含“1/1/15”和“3/31/15”之间的窗口吗?如果是这样,那么我就不需要MTD的子查询了,YTD?我想我尝试的方法是,给我所有的记录(即YTD)和窗口当前和窗口MTD的开始/结束日期。我不确定我是否完全按照问题,但你可以用
DATEPART(quarty,CheckDate)
获得季度。如果要显示的天数少于计算窗口中包含的整个天数范围,则只需要子查询。这就清楚了吗?比如,我不能创建一个包含“1/1/15”和“3/31/15”之间的第一季度窗口吗?如果是这样,那么我就不需要MTD的子查询了,YTD?我想我尝试的方法是,给我所有的记录(即YTD)和窗口当前和窗口MTD的开始/结束日期。我不确定我是否完全按照问题,但你可以用
DATEPART(quarty,CheckDate)
获得季度。如果要显示的天数少于计算窗口中包含的整个天数范围,则只需要子查询。这能把事情弄清楚吗?