带连接的SQL Server动态数据透视表

时间:2017-12-01 13:53:18

标签: sql sql-server dynamic pivot

我理解这个问题已被多次询问,但我似乎无法找到适合或有效的例子。我有一个查询输出行中的数据,但我需要按列。枢轴列是项目描述,列数可以变化。我有下面的代码来构建列,这是正常的。

    DECLARE @Columns as VARCHAR(MAX)
    SELECT @Columns = COALESCE(@Columns + ', ','') + QUOTENAME(JOB_GROUP)
    FROM
        (SELECT DISTINCT ITEM.ITEM_DESCRIPTION
         FROM ITEM LEFT JOIN MATRIX_DETAIL ON ITEM.ITEM_ID= MATRIX_DETAIL.ITEM_ID
         WHERE MATRIX_DETAIL.MATRIX_ID = 1
        ) AS B
        ORDER BY B.ITEM_DESCRIPTION

以下代码是我遇到问题的地方。我不确定它是否是连接或者是什么。对于最终报告,在旋转列开始之前它将有更多列,对于这个例子,我只是试图让一列正确显示然后我可以从那里构建它。下面的代码告诉我我的列名称无效等等。我在这里遗漏了一些显而易见的东西,希望很容易。任何帮助将不胜感激。

       DECLARE @SQL as VARCHAR(MAX)

       SET @SQL  = 'SELECT ACTION_CODE_KIT, ' + @Columns + '
         FROM 
         (SELECT MATRIX.ACTION_CODE_KIT
          FROM MATRIX INNER JOIN
               MATRIX_ACTION_CODES ON MATRIX.MATRIX_ID = MATRIX_ACTION_CODES.MATRIX_ID INNER JOIN
               MATRIX_DETAIL ON MATRIX_ACTION_CODES.ACTION_CODE_ID = MATRIX_DETAIL.ACTION_CODE_ID LEFT OUTER JOIN
               ITEM ON MATRIX_DETAIL.ITEM_ID = ITEM.ITEM_ID LEFT OUTER JOIN
               [PLAN] ON MATRIX_ACTION_CODES.PLAN_CODE = [PLAN].PLAN_CODE
         ) as PivotData
         PIVOT
         (
            MIN(ITEM_ID)
            FOR MATRIX.ACTION_CODE_KIT IN(' + @Columns + ')
         ) AS PivotResult'

         EXEC (@sql)

1 个答案:

答案 0 :(得分:0)

枢轴很直接。

SQL Server dynamic PIVOT query?

您只需要确保INNER JOIN查询以枢轴需要的格式生成内容。

您没有提供任何数据或结构,因此我可以为您提供具体的详细信息。但我要做的是首先在时态表中插入INNER JOIN查询,以确保数据具有正确的格式。然后执行正常的数据透视以确保一切正常,最后添加动态列。