Мне нужно преобразовать запрос на доступ в запрос SQL Server, но я получаю сообщение об ошибке. Может ли кто-нибудь указать мне причину ошибки?
Вот запрос MS Access:
TRANSFORM Avg([X Avg Sub Group]) AS [AvgOfX Avg Sub Group]
SELECT Day, Process,
PARTNO_VAL0, CTQNO_VAL0,
ctq_description, MACHINE_VAL0,
usl, lsl,
Avg([X Avg Sub Group]) AS [Total Of X Avg Sub Group]
FROM [Capability Data with Shift]
WHERE (((Process)="BBB WELDING"))
GROUP BY Day, Process, PARTNO_VAL0, CTQNO_VAL0, ctq_description, MACHINE_VAL0, usl, lsl
PIVOT SHIFT_VAL0;
Вот что я сделал:
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(avg([X Avg Sub Group]))
FROM [Capability Data with Shift]
WHERE (((Process)='BBB WELDING'))
GROUP BY Day, Process, PARTNO_VAL0, CTQNO_VAL0, ctq_description, MACHINE_VAL0, usl, lsl, SHIFT_VAL0
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'');
SET @query = ' SELECT Day, Process, PARTNO_VAL0, CTQNO_VAL0, ctq_description, MACHINE_VAL0, usl, lsl, [Total Of X Avg Sub Group], ' + @cols + '
FROM
(
SELECT Day, Process, PARTNO_VAL0, CTQNO_VAL0, ctq_description, MACHINE_VAL0,
usl, lsl, SHIFT_VAL0, Avg([X Avg Sub Group]) AS [Total Of X Avg Sub Group]
FROM [Capability Data with Shift]
WHERE (((Process)=''BBB WELDING''))
GROUP BY Day, Process, PARTNO_VAL0, CTQNO_VAL0, ctq_description, MACHINE_VAL0, usl, lsl, SHIFT_VAL0
) t
PIVOT
(
avg([Total Of X Avg Sub Group])
FOR SHIFT_VAL0 IN( ' + @cols + ')
) p ';
Execute(@query);
Вот результат, который я получаю при выполнении запроса в SQL Server:
(затронут 1 строка))
Сообщение 8114, Уровень 16, Состояние 1, Строка 17 Ошибка преобразования типа данных nvarchar в int.
Сообщение 473, Уровень 16, Состояние 1, Строка 17 Неправильное значение "0.000642857" равнопредоставляется в операторе PIVOT.
Сообщение 207, Уровень 16, Состояние 1, Строка 1 Неверное имя столбца «Всего из подгруппы Avg».