使用SSRS 2008和SQL Server 2014使用相同表和字段的2个数据集的最有效代码

问题描述 投票:0回答:2

我建立了具有两个单独数据集的SSRS报告,并为每个数据集都有一个单独的表。这两个数据集都访问SQL Server中的相同数据库表。

  • Dataset1具有排除某些帐户的详细信息。
  • 数据集2具有上述排除帐户的详细信息。

想法是在导出到Excel时将每个表放在单独的工作表中。

不是编写相同的代码两次(每个数据集一次),有没有一种方法可以编写一次代码(因此仅处理一次)并使每个数据集仅访问该代码的一部分?

我的数据集代码如下:

Dataset 1:
===============

SELECT AccountNumber
      ,Field 2
      ,Field 3

INTO #temp_table1

FROM MainTable
WHERE Condition1 AND condition2 AND condition3
-----------------------------------------------------------
SELECT AccountNumber    
INTO #temp_table2

FROM MainTable
WHERE Condition4 AND condition5
-----------------------------------------------------------
SELECT AccountNumber
      ,Field 2
      ,Field 3
FROM #temp_table1

WHERE AccountNumber NOT IN (SELECT AccountNumber FROM #temp_table2)

然后这是数据集2的代码:

Dataset 2:
===============

SELECT AccountNumber
      ,Field 2
      ,Field 3

INTO #temp_table1

FROM MainTable
WHERE Condition1 AND condition2 AND condition3
-----------------------------------------------------------
SELECT AccountNumber
      ,Field 2
      ,Field 3

INTO #temp_table2

FROM MainTable
WHERE Condition4 AND condition5
-----------------------------------------------------------
SELECT AccountNumber
      ,Field 2
      ,Field 3
FROM #temp_table1

WHERE AccountNumber IN (SELECT AccountNumber FROM #temp_table2)
-- The only thing that changes in this code is that I have removed the NOT and only kept IN.

可能的解决方案:

SELECT AccountNumber
      ,Field 2
      ,Field 3
INTO #temp_dataset1
FROM #temp_table1

WHERE AccountNumber NOT IN (SELECT AccountNumber FROM #temp_table2)

SELECT AccountNumber
      ,Field 2
      ,Field 3
INTO #temp_dataset2
FROM #temp_table1

WHERE AccountNumber IN (SELECT AccountNumber FROM #temp_table2)

Datset 1:

SELECT * FROM #temp_Dataset1

Datset 2:

SELECT * FROM #temp_Dataset2

有任何建议吗?

sql-server reporting-services ssrs-2008
2个回答
1
投票

我建议您可以将两个数据集合并为一个数据集,并有一个额外的列,用于指定数据所属的子集。

然后在SSRS中,为每个Tablix(或正在使用的任何数据驱动的对象)过滤所需的子集。


1
投票

我同意Tab Alleman。

您可以在SELECT语句下使用子查询,也可以创建“内部联接”,我建议后者。像这样的东西:

SELECT a.Account Number
,a.Field 2
,a.Field 3
,b.Account Number
,b.Field 2
,b.Field 3

FROM MainTable a
INNER JOIN MainTable b
  ON Condition 1
  AND Condition 2
  AND Condition 3 

我确定您正在使用的数据会更复杂,但这可能会给您一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.