我需要创建一个SSRS报告,该报告传递参数列表并返回所有参数,即使没有与参数关联的记录也是如此。我已经在下面发布了我想要完成的任务。
通过参数:12388501,1238853,1238858,123885900,12388573
并希望最终报告看起来像下面的示例:
此示例中传递的参数是帐号。如何将帐号显示为记录,即使它未包含在数据库中?
我正在使用SQL Server 2012数据库,SSMS来开发查询,并最终在SSRS中创建报告。 我希望我对这个问题的措辞有意义。如果我的查询中有任何遗漏,请告诉我,我会提供。提前谢谢!
答案 0 :(得分:0)
步骤1:将字符串拆分为表格的行。我的理解是,Erland Sommarskog被认为是处理SQL Server中列表的权限:Arrays and Lists in SQL Server 2008 Using Table-Valued Parameters(2012年修订。他在Arrays and Lists in SQL Server有一个专门讨论更广泛主题/早期SQL Server版本的页面。)还有其他方法可以通过用户定义的函数将字符串拆分为表值参数,这些函数可以很好地用于类似于此处的小列表。
步骤2:使用您从字符串参数拆分中填充的表值参数,形成如下所示的查询。第一个SELECT中的INNER JOIN将只为您提供与内联表中的AccountNumber匹配的记录,而第二个SELECT中的WHERE子句的LEFT OUTER JOIN将仅为您提供myTable中不存在的AccountNumber值。只要它们匹配myTable中相应字段的数据类型,您就可以将其他值替换为我已经存根的NULL值。
SELECT mt.AccountNumber,mt.LastName,mt.FirstName,mt.ContactNumber,mt.Address,mt.City,mt.State,mt.Zip
FROM myTable mt JOIN @t t ON mt.AccountNumber = t.AccountNumber
UNION
SELECT t.AccountNumber,NULL LastName,NULL FirstName,NULL ContactNumber,NULL Address,NULL City,NULL State, NULL Zip
FROM @t t
LEFT OUTER JOIN myTable mt ON t.AccountNumber = mt.AccountNumber
WHERE mt.AccountNumber IS NULL