I need to transform an access query to sql server query but I am getting an error, can someone point me to the error cause?
Here is the MS Access query:
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; Here is what I have done:
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); This is the result I am getting when I execute the query in SQL Server:
(1 row(s) affected)
Msg 8114, Level 16, State 1, Line 17 Error converting data type nvarchar to int.
Msg 473, Level 16, State 1, Line 17 The incorrect value "0.000642857" is supplied in the PIVOT operator.
Msg 207, Level 16, State 1, Line 1 Invalid column name 'Total Of X Avg Sub Group'.