【发布时间】: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