将 MS Access TRANSFORM/PIVOT 查询转换为 SQL Server

福斯托纳尔逊

我需要将访问查询转换为 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 行 PIVOT 运算符中提供了不正确的值“0.000642857”。

消息 207,级别 16,状态 1,第 1 行无效的列名称“X 平均子组的总数”。

4d怪物

我有这样的通用存储过程用于旋转

CREATE PROCEDURE [dbo].[msrTransformAsAccessDo]
    @TRANSFORM_Function nvarchar(max),
    @TRANSFORM_Field nvarchar(max),
    @SQL_SELECT nvarchar(max),
    @SQL_FROM_WHERE nvarchar(max),
    @SQL_GROUPBY_HAVING_ORDERBY nvarchar(max),
    @PIVOTBY nvarchar(max) 
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @DynSQL nvarchar(max)

    SET @DynSQL = N' SELECT DISTINCT ' + @PIVOTBY + ' as key_value into ##pivoting ' + @SQL_FROM_WHERE + ' ORDER BY ' + @PIVOTBY

    DROP TABLE IF EXISTS ##pivoting
    EXEC (@DynSQL)

    DECLARE @Values nvarchar(max) = N''
    DECLARE @tmpStr nvarchar(max)
    DECLARE @rsk CURSOR         

    SET @rsk = CURSOR SCROLL
        FOR 
            select key_value from ##pivoting
    OPEN @rsk         
        FETCH NEXT FROM @rsk INTO @tmpStr
        WHILE @@FETCH_STATUS = 0
            BEGIN
                SET @Values = @Values + ', ' + @TRANSFORM_Function + '(Case When convert(nvarchar,' + @PIVOTBY + ')=convert(nvarchar,''' + @tmpStr + ''') Then ' + @TRANSFORM_Field + ' Else Null End) AS [' + @tmpStr + '] '
                FETCH NEXT FROM @rsk INTO @tmpStr
            END
    CLOSE @rsk

    DROP TABLE IF EXISTS ##pivoting

    SET @DynSQL = @SQL_SELECT + ' ' + @Values + ' ' + @SQL_FROM_WHERE + ' ' + @SQL_GROUPBY_HAVING_ORDERBY

    EXEC (@DynSQL)
END
GO

并呼吁您的案例:

EXECUTE msrTransformAsAccessDo 
   'Avg', 
   '[X 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 ', 
   'SHIFT_VAL0'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将SQl查询转换为MS Access

来自分类Dev

将MS Access数据查询转换为SQL Server数据库查询

来自分类Dev

将MS Access数据查询转换为SQL Server数据库查询

来自分类Dev

将MS Access计数和数据透视查询转换为SQL Server

来自分类Dev

将功能从SQL Server转换为MS Access

来自分类Dev

将Access TRANSFORM / PIVOT查询转换为SQL Server 2012

来自分类Dev

将MS Access SQL转换为Oracle?

来自分类Dev

将PHP查询转换为MS Access

来自分类Dev

将mysql查询转换为MS SQL

来自分类Dev

将Access SQL转换为SQL Server

来自分类Dev

将MS Access中的数据透视表转换为SQL Server中的数据透视表

来自分类Dev

SQL查询将行转换为MS Access表中的列

来自分类Dev

将MS-SQL Server存储过程转换为MySQL查询

来自分类Dev

将查询转换为SQL Server语法

来自分类Dev

将Oracle查询转换为SQL Server?

来自分类Dev

MS SQL SERVER - 将 int 转换为价格格式

来自分类Dev

从MS-SQL Server查询转换为MySQL和DATEDIFF()

来自分类Dev

IS NOT NULL AS ...-将查询从MySQL转换为MS-SQL

来自分类Dev

将PostgreSQL查询转换为SQL Server查询

来自分类Dev

将SQL Server 2008查询转换为bcp查询

来自分类Dev

将SQL Server查询转换为SQLite查询

来自分类Dev

将SQL Server查询转换为Linq查询

来自分类Dev

将 mysql 查询转换为 sql server 2000 的 mssql 查询

来自分类Dev

如何将 SQL SERVER 查询转换为 Oracle SQL?

来自分类Dev

合并 Access 查询并转换为 SQL Server

来自分类Dev

将SQL Server创建表转换为Access

来自分类Dev

将表从SQL Server导出到MS Access

来自分类Dev

如何通过编码将数据从MS Access导入Sql Server

来自分类Dev

将Linq表达式转换为SQL Server查询

Related 相关文章

热门标签

归档