我建立了具有两个单独数据集的SSRS报告,并为每个数据集都有一个单独的表。这两个数据集都访问SQL Server中的相同数据库表。
想法是在导出到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
有任何建议吗?
我建议您可以将两个数据集合并为一个数据集,并有一个额外的列,用于指定数据所属的子集。
然后在SSRS中,为每个Tablix(或正在使用的任何数据驱动的对象)过滤所需的子集。
我同意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
我确定您正在使用的数据会更复杂,但这可能会给您一个好主意。