Передать параметры в Pivot SQL

У меня был этот запрос ниже, и во время выполнения я получил ошибку с параметром @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

Запрос будет выполняться при удалении параметра, но необходимо отфильтровать записи. заранее спасибо.

Какие СУБД вы используете? (Приведенный выше код зависит от продукта.)

jarlh 24.11.2022 09:30

Я использую MS SQL Server 2008 R2.

newbeliever 24.11.2022 09:42

И откуда взялась эта @emp_group? Какой это тип данных? Он нигде не объявлен в этом запросе.

Nenad Zivkovic 24.11.2022 10:10

Параметр @emp_group был объявлен в процедуре, но не показан в приведенном выше запросе. Он был объявлен как тип данных nvarchar. Спасибо.

newbeliever 24.11.2022 10:31
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать то же самое с @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)

newbeliever 24.11.2022 15:34

я изменил оператор sql. пожалуйста, позаботьтесь о том, чтобы при объединении Table1 с Table2 не использовать «SELECT * FROM» ..., который генерирует повторяющиеся имена столбцов, и сервер sql не допустит этого. Пожалуйста, укажите оператор sql для необходимого вывода.

Falko 25.11.2022 08:16

Спасибо, сэр, и это работает! Фактический запрос действительно выбирает определенные столбцы и не восстанавливает все столбцы в обеих таблицах.

newbeliever 25.11.2022 08:25

Другие вопросы по теме