【问题标题】:SQL Server Dynamic Pivot with Joins带联接的 SQL Server 动态数据透视
【发布时间】:2018-05-15 15:36:06
【问题描述】:

我知道这个问题已经被问过很多次了,但是我似乎找不到适合我的情况或有效的例子。我有一个按行输出数据的查询,但是我需要按列输出数据。数据透视列是项目描述,列的数量可能会有所不同。我有下面的代码来构建列,它工作正常。

    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)

【问题讨论】:

  • 我将首先打印@sql 并尝试执行该查询。它会给你一个更清晰的想法。
  • 我确实做了我得到错误的地方。它说明无效的列名“ACTION_CODE_KIT”、无效的列名“ITEM_ID”和列前缀“MATRIX”与表名不匹配。
  • 我们需要一些细节来提供帮助。我们不知道您的表格结构,也看不到您的屏幕。这是一个很好的起点。 spaghettidba.com/2015/04/24/…
  • 知道了,无法真正发布数据。所有连接都是整数类型,并且 item_id 和 action_code_kit 都是 nvarchar。

标签: sql sql-server dynamic pivot


【解决方案1】:

Pivot 非常简单。

SQL Server dynamic PIVOT query?

您只需要确保 INNER JOIN 查询产生的内容符合数据透视所需的格式。

你没有提供任何数据或结构,所以我可以给你具体的细节。但我要做的是首先在时态表中插入INNER JOIN 查询,以确保数据具有正确的格式。然后执行正常的支点以确保一切正常,最后添加动态列。

【讨论】:

  • 直截了当哈哈。它能够为我指明正确的方向
  • 所以我现在让它输出所有内容。我需要花一些时间来验证结果,但一切看起来都不错。只是需要一些方向,因为我发现我没有找到任何相同的“解决方案”
  • 所以这真的是直截了当还是有点讽刺?我的观点是,如果您拥有正确格式的数据,则很容易进行数据透视。
  • 有点讽刺。主要是我不会在这里,如果它是那么直截了当。但是,正如我所说,您的 cmets 让我转向了与以往不同的方向,并允许我开始消除错误并实际输出数据。所以感谢您的输入,否则我仍然会搜索。
猜你喜欢
  • 2014-10-16
  • 2014-07-26
  • 1970-01-01
  • 2013-02-09
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多