【发布时间】:2011-05-04 14:46:41
【问题描述】:
我还没有看到这样的问题,但是如果有一个已经回答的问题,请告诉我。
我必须使用存储过程创建导出。遗憾的是,目前无法在 SSRS 中创建此报告。
我需要做的是动态创建一个数据透视表并将其合并到另一个 - 或者这就是我认为可行的方法。
原始数据的工作方式与此类似(我已更改项目以保护我公司的数据):
他们希望报告中的数据看起来像这样(为了节省空间,我没有使用所有日期,但您可以理解):
我创建了一个临时表并创建了两个动态数据透视表。两个表将分别工作,但是一旦我使用 UNION ALL,我会收到一条错误消息(我将在下面添加)。我包括了我用来创建两个枢轴的代码。谁能告诉我我做错了什么?
是否有可能在一个支点中做到这一点?
/*
Use dynamic SQL to find all
Issue Dates for column headings
*/
DECLARE @Jquery VARCHAR(8000)
DECLARE @query VARCHAR(4000)
DECLARE @years VARCHAR(2000)
SELECT @years = STUFF(( SELECT DISTINCT
'],[' + 'Item 1' + ' ' + (IssueDate)
FROM #GroupData GroupData
ORDER BY '],[' + 'Item 1' + ' ' + (IssueDate)
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(
SELECT LocationID, StoreName, StoreState AS State, "Item 1" + " " + (IssueDate) AS IssueDate, MoneyOrder
FROM #GroupData GroupData
) MoneyOrderIssued
PIVOT (MAX(MoneyOrder) FOR IssueDate
IN ('+@years+')) AS pvt'
DECLARE @queryMOUsed VARCHAR(4000)
DECLARE @MOUsedYear VARCHAR(2000)
SELECT @MOUsedYear = STUFF(( SELECT DISTINCT
'],[' + 'Item 2' + ' ' + (IssueDate)
FROM #GroupData GroupData
ORDER BY '],[' + 'Item 2' + ' ' + (IssueDate)
FOR XML PATH('')
), 1, 2, '') + ']'
SET @queryMOUsed =
'SELECT * FROM
(
SELECT LocationID, StoreName, StoreState AS State, "Item 2" + " " + (IssueDate) AS IssueDate, MOUsed
FROM #GroupData GroupData
)SCRMoneyOrders
PIVOT (MAX(MOUsed) FOR IssueDate
IN ('+@MOUsedYear+')) AS pvt'
SET @Jquery = @query + ' UNION ALL ' + @queryMOUsed
EXECUTE (@query) -- Only in here to show that this works w/out UNION ALL
EXECUTE (@queryMOUsed) -- Only in here to show that this works w/out UNION ALL
EXECUTE (@Jquery)
我收到的错误信息如下:
警告:空值被聚合或其他 SET 操作消除。 消息 8114,第 16 级,状态 5,第 1 行 将数据类型 varchar 转换为 bigint 时出错。
【问题讨论】:
标签: sql sql-server-2005 pivot-table