У меня есть хранимая процедура, которая отлично работает, объединяя 2 таблицы. Мне нужно было добавить новое поле из новой таблицы, которая не была включена в исходный SP. То, что я пытаюсь сделать, это суммировать поле из новой таблицы для каждой записи, которая является дочерней записью родительской таблицы, которая находится в исходном SP.
Я проверил сумму на основе родительской таблицы в тестовом запросе, и она отлично работает:
select totaldollars from TTS_EmpTime where emptimedaytotal_id='32878'
так что следующим шагом будет интеграция в SP. Я сделал это и установил жирным шрифтом новые части SP, чтобы вы могли видеть, что было добавлено. Если полужирные части удалены, SP работает нормально, если нет, я получаю эту ошибку:
* Сообщение 8120, уровень 16, состояние 1, процедура TTS_RptTest2, строка 11
Столбец 'TTS_EmpTimeDayTotal.EmployeeID' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY *.
Вот мой сохраненный процесс:
USE [TTSTimeClock]
GO
/****** Object: StoredProcedure [dbo].[TTS_RptTest2] Script Date: 03/04/2011 12:29:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[TTS_RptTest2]
@BureauID nvarchar(36),
@CompanyID nvarchar(36),
@DivisionID nvarchar(10) ,
@punchDate smalldatetime,
@PeriodDays integer,
@EmployeeID nvarchar(20) = null
As
--with DayTotals as(
select
DayTotal.DivisionID,
DayTotal.EmployeeID,
EmpData.EmployeeFirstName AS First,
EmpData.EmployeeLastName AS Last,
EmpData.employeetypeid AS EmpId,
DayTotal.ID as DayTotalID,
-- Format the Date as MM/DD DOW or 2Digit Month & 2Digit Day and the 3Char Day of the week Uppercase
convert(varchar(5),DayTotal.PunchDate,101) + ' ' + upper(left(datename(dw,DayTotal.Punchdate),3))as PunchDate,
-- Format the in and out time as non military time with AM or PM No Dates
substring(convert(varchar(20), DayTotal.FirstDayPunch, 9), 13, 5) + ' ' + substring(convert(varchar(30), DayTotal.FirstDayPunch, 9), 25, 2)as TimeIn,
substring(convert(varchar(20), DayTotal.LastDayPunch, 9), 13, 5) + ' ' + substring(convert(varchar(30), DayTotal.LastDayPunch, 9), 25, 2) as TimeOut,
DayTotal.RegularHours,
DayTotal.NonOvertimeHours,
DayTotal.OvertimeHours,
DayTotal.TotalDayHRS,
DayTotal.PeriodRegular,
DayTotal.PeriodOtherTime,
DayTotal.PeriodOvertime,
DayTotal.PeriodTotal,
**sum(cast(EmpTime.TotalDollars as float)) as TotalDayDollars**
from TTS_EmpTimeDayTotal as DayTotal
INNER JOIN TTS_PayrollEmployees AS EmpData
ON DayTotal.EmployeeID = EmpData.EmployeeID
**inner JOIN TTS_Emptime as EmpTime
ON DayTotal.id = emptime.emptimedaytotal_id**
where
DayTotal.BureauID = @BureauID
AND DayTotal.CompanyID = @CompanyID
AND (DayTotal.DivisionID = @DivisionID)
AND daytotal.periodstart =
-- Period start date
(SELECT DISTINCT PeriodStart
FROM TTS_EmpTimeDayTotal
WHERE(BureauID = @BureauID) AND (CompanyID = @CompanyID) AND ( (DivisionID = @DivisionID))
AND (PunchDate = @punchDate)and periodend = dateadd(d,(@PeriodDays - 1),(periodstart)))
AND daytotal.periodend =
-- Period End Date
(SELECT DISTINCT PeriodEnd
FROM TTS_EmpTimeDayTotal
WHERE(BureauID = @BureauID) AND (CompanyID = @CompanyID) AND ( (DivisionID = @DivisionID))
AND (PunchDate = @punchDate)and periodend = dateadd(d,(@PeriodDays-1),(periodstart)))
-- Optional all employees or just one
AND (( @EmployeeID is Null) or (DayTotal.EmployeeID = @EmployeeID))
order by Empdata.employeetypeid,DayTotal.punchdate
Я вообще не группируюсь, так что это должно быть вызвано чем-то другим?
Любая помощь будет оценена