【发布时间】:2018-12-21 17:54:06
【问题描述】:
我需要将访问查询转换为 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 行无效的列名称 'Total Of X Avg 子组'。
【问题讨论】:
-
在执行之前尝试打印你的动态 sql 字符串。无论如何都应该这样做,这样你才能真正知道你在运行什么。
标签: sql-server ms-access pivot