У меня был этот запрос ниже, и во время выполнения я получил ошибку с параметром @emp_group. Нужно ваше предложение о том, как передать параметр.
DECLARE @cols NVARCHAR (MAX)
DECLARE @query NVARCHAR(MAX);
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [LogDate], 106) + ']',
'[' + CONVERT(NVARCHAR, [LogDate], 106) + ']')
FROM (SELECT DISTINCT LogDate FROM AttendanceLog where LogDate between DateFrom and DateTo) PV
ORDER BY [LogDate]
SET @query = ' SELECT * FROM
(
SELECT * FROM Table1 A
INNER JOIN Table2 B ON B.empno= A.empno WHERE A.Status = ''Active'' and B.EmployeeGroup = @emp_group
) PvTable
PIVOT
(
SUM(OTHrs)
FOR [LogDate] IN (' + @cols + ')
) PvTable
';
EXEC SP_EXECUTESQL @query
Запрос будет выполняться при удалении параметра, но необходимо отфильтровать записи. заранее спасибо.
Я использую MS SQL Server 2008 R2.
И откуда взялась эта @emp_group? Какой это тип данных? Он нигде не объявлен в этом запросе.
Параметр @emp_group был объявлен в процедуре, но не показан в приведенном выше запросе. Он был объявлен как тип данных nvarchar. Спасибо.
Вы можете сделать то же самое с @emp_group, как и с @cols. Извлеките их из текста и передайте в качестве параметра.
SET @query = 'SELECT *
FROM (SELECT A.*, B.EmployeeGroup
FROM Table1 A
INNER JOIN Table2 B ON B.empno= A.empno
WHERE A.Status = ''Active'' and B.EmployeeGroup = ''' + @emp_group + ''') PvTable
PIVOT(SUM(OTHrs) FOR [LogDate] IN (' + @cols + ')) PvTable';
Когда я помещаю в запрос статическое значение @emp_group, например, @emp_group=''Daily'', он возвращает записи. Но при использовании в качестве параметра возникает проблема. Можете ли вы предоставить пример того, как это сделать в хранимой процедуре? Хранимая процедура будет принимать 3 параметра (DateFrom, DateTo, EmployeeGroup)
я изменил оператор sql. пожалуйста, позаботьтесь о том, чтобы при объединении Table1 с Table2 не использовать «SELECT * FROM» ..., который генерирует повторяющиеся имена столбцов, и сервер sql не допустит этого. Пожалуйста, укажите оператор sql для необходимого вывода.
Спасибо, сэр, и это работает! Фактический запрос действительно выбирает определенные столбцы и не восстанавливает все столбцы в обеих таблицах.
Какие СУБД вы используете? (Приведенный выше код зависит от продукта.)