在SQL中创建了两个表的联合之后,如何在SSRS中的单个行中显示每个表的总和Tablix
问题描述:
我试图在SSRS中创建一个Tablix,其中单行显示TypeOfWork的工作量的总和,来自两个独立的数据库表。在SQL中创建了两个表的联合之后,如何在SSRS中的单个行中显示每个表的总和Tablix
我使用Union创建了一个数据集(sql显示简化了,但它是基本思想),它允许我在每个表格中获得每种类型的工作的总和 - 通过我如何进行分组。我可以很容易地从SSRS Tablix上的两行表格中为他们自己的行显示两种款项,每种类型的工作。如:
工作区域|工作类型|新表总和
工作区域|工作类型|旧表总和
...和重复
但如何显示一行的款项,因为这样的:
工作区|工作类型|新表总和|旧表总和
这里是基本的SQL:
SELECT SourceTable, WorkArea, TypeOfWork, Sum(WorkAmount)
FROM
(
SELECT 'OldTable' AS SourceTable, o.*
FROM Old o
UNION ALL
SELECT
'NewTable' AS SourceTable
, NEWID()
, '2A077AC6-8040-49CB-B1FD-CD96D0A30533' AS [OldGuid]
, n.*
FROM New n
) AS ReportTable
GROUP BY WorkArea, TypeOfWork, SourceTable
答
您可以在上面查询中使用CASE语句:
SELECT WorkArea
, TypeOfWork
, OldTableSum = SUM(CASE WHEN ReportTable.SourceTable = 'OldTable' THEN WorkAmount ELSE 0 END)
, NewTableSum = SUM(CASE WHEN ReportTable.SourceTable = 'NewTable' THEN WorkAmount ELSE 0 END)
FROM
(
SELECT 'OldTable' AS SourceTable, o.*
FROM Old o
UNION ALL
SELECT
'NewTable' AS SourceTable
, NEWID()
, '2A077AC6-8040-49CB-B1FD-CD96D0A30533' AS [OldGuid]
, n.*
FROM New n
) AS ReportTable
GROUP BY WorkArea, TypeOfWork
福克斯。结果是相似的,但你的CASE允许我有一个方便的方法来命名每个总数。我仍然得到每个表的总和单独的行。我尝试在Tablix行组中对TypeOfWork进行分组,但是它只显示旧表的总和,并没有显示两个总和。我会认为在工作类型上的分组会做到这一点,但可悲的是我只是拿着旧桌子的信息。 –
我的不好,你需要删除GROUP BY SourceTable - 我修正了上面的查询。 –
当我在SQL Server Management Studio中尝试时,出现此错误:列'ReportTable.SourceTable'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 –