在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 
+0

福克斯。结果是相似的,但你的CASE允许我有一个方便的方法来命名每个总数。我仍然得到每个表的总和单独的行。我尝试在Tablix行组中对TypeOfWork进行分组,但是它只显示旧表的总和,并没有显示两个总和。我会认为在工作类型上的分组会做到这一点,但可悲的是我只是拿着旧桌子的信息。 –

+0

我的不好,你需要删除GROUP BY SourceTable - 我修正了上面的查询。 –

+0

当我在SQL Server Management Studio中尝试时,出现此错误:列'ReportTable.SourceTable'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 –