Sql server 按存储过程存储另一列中的行总和

Sql server 按存储过程存储另一列中的行总和,sql-server,sql-server-2008,stored-procedures,pivot-table,Sql Server,Sql Server 2008,Stored Procedures,Pivot Table,我得到了所有员工的工作时间清单。查询如下: ALTER PROCEDURE [dbo].[Get_EmployeeWiseWorkingTime] @PayPeriodID as int AS BEGIN DECLARE @StartDate DATETIME='2014-04-21 00:00:00.000' DECLARE @EndDate DATETIME='2014-05-04 00:00:00.000' Select @StartDate=[PeriodStartDate],@End

我得到了所有员工的工作时间清单。查询如下:

ALTER PROCEDURE [dbo].[Get_EmployeeWiseWorkingTime] 
@PayPeriodID as int
AS
BEGIN
DECLARE @StartDate DATETIME='2014-04-21 00:00:00.000'
DECLARE @EndDate DATETIME='2014-05-04 00:00:00.000'
Select @StartDate=[PeriodStartDate],@EndDate=[PeriodEndDate] from PayPeriod --where         PayPeriodId=@PayPeriodID

DECLARE @DateList VARCHAR(MAX), @DateListCoalesced VARCHAR(MAX)
SELECT @DateList = '', @DateListCoalesced = ''
;WITH DateLimits AS (
  SELECT CAST(@StartDate AS DATE) AS dt
  UNION ALL
  SELECT DATEADD(dd, 1, dt)
  FROM DateLimits s
  WHERE DATEADD(dd, 1, dt) <= CAST(@EndDate AS DATE))
  SELECT @DateList =  @DateList + '[' + CAST(dt AS VARCHAR)+ '], ' ,
  @DateListCoalesced = @DateListCoalesced + ' COALESCE( [' + CAST(dt AS VARCHAR)+ '] , 0) as [' + CAST(dt AS VARCHAR)+ '], ' 
 FROM DateLimits

;SET @DateList = LEFT(@DateList, LEN(@DateList) - 1)
;SET @DateListCoalesced = LEFT(@DateListCoalesced, LEN(@DateListCoalesced) - 1)


DECLARE @query NVARCHAR(max)
 SET @query = N'SELECT [EmployeeID],FirstName,LastName, ' +  @DateListCoalesced +'
FROM   
(SELECT DayLog.[EmployeeID],FirstName,LastName, DayLog.[CreatedDate], [WorkingTime] 
 FROM DayLog
INNER JOIN Employees ON Employees.EmployeeID = DayLog.EmployeeID    
) p
PIVOT
(
    Sum ([WorkingTime] )
    FOR [CreatedDate] IN ( '+ @DateList +' )
) AS pvt order by EmployeeID'
EXEC sp_executesql@Query 结束

结果是:

我想添加一个列名Total,用于计算并添加所列数据的总工作时间。
任何示例都将不胜感激。

“从字符串转换日期和/或时间时转换失败。”请将DayLog。[CreatedDate]更改为Convertvarchar50,DayLog。[CreatedDate],120。使用任何格式,而不是你期望的120格式。这是相同的结果。。我将结果添加为图像。。未添加任何名为“Total”的列您还必须将“Total”列添加到“selected”列表中。它工作正常。。只有一件事。。。我根据从下拉列表中选择的@PayperiodId填充数据。total字段为我提供了该特定员工的所有金额,而不考虑所选的发薪期
;SET @DateList = @DateList + 'Total'
;SET @DateListCoalesced = @DateListCoalesced + 'Total'

SET @query = N'SELECT [EmployeeID],FirstName,LastName, ' +  @DateListCoalesced +'
FROM   
(
    SELECT DayLog.[EmployeeID],FirstName,LastName, Convert(varchar(50), DayLog.[CreatedDate], 120) as CreatedDate, [WorkingTime] 
    FROM DayLog
    INNER JOIN Employees ON Employees.EmployeeID = DayLog.EmployeeID    

    UNION

    SELECT DayLog.[EmployeeID],FirstName,LastName, ''Total'', Sum([WorkingTime]) 
    FROM DayLog
    INNER JOIN Employees ON Employees.EmployeeID = DayLog.EmployeeID    
    GROUP BY DayLog.[EmployeeID],FirstName,LastName
) p
PIVOT
(
    Sum ([WorkingTime] )
    FOR [CreatedDate] IN ( '+ @DateList +' )
) AS pvt order by EmployeeID'