2017-02-10 71 views
2

我期待做一个基本的报告,并在我的数据库中,我有主表中的项目表示硬件,软件应用程序等与多平台的关系多属于。SSRS列包含多对多关系项目列表

在一个记录有多个平台的情况下,我想它在逗号

数据库排版范例

Database Diagram

所以分开列听从本质上讲,我想大致如下构建我的查询。

SELECT cat.CategoryName, sub.SubCategoryName, cur.Model, cur.Version, cur.Vendor, -- >pla.PlatformName, <-- 
     cur.AvailableDate, cur.EndOfProduction, cur.EndOfSupport, dep.DepartmentName, 
     emp.FirstName + ' ' +emp.LastName AS 'Tech Owner', emp2.FirstName +' ' + emp2.LastName AS 'Tech Contact', 
     cur.NumOfDevices, cur.UpgradeDuration, cur.FiscalConsideration 
FROM 
dbo.Currency Cur 
INNER JOIN dbo.SubCategory sub 
ON cur.SubCategoryId = sub.SubCategoryId 
INNER JOIN dbo.Category cat 
ON sub.CategoryId = cat.CategoryId 
INNER JOIN dbo.Employee emp 
ON cur.OwnerId = emp.EmployeeId 
INNER JOIN dbo.Employee emp2 
ON cur.ContactId= emp2.EmployeeId 
INNER JOIN dbo.Department dep 
ON cur.PortfolioOwnerId = dep.DepartmentId 
LEFT JOIN dbo.Currency_Dependency cd 
ON cur.CurrencyId = cd.CurrencyId 
LEFT JOIN dbo.Currency_Affected ca 
ON cur.CurrencyId = ca.CurrencyId 
LEFT JOIN dbo.Currency_Platform cpla 
ON cur.CurrencyId = cpla.CurrencyId 
Left JOIN dbo.Platform pla 
ON cpla.PlatformId = pla.PlatformId 
GO 

那么,我该查询中有平台的名字,我想构建它作为该列表由逗号分隔,但我不知道我将如何去有关。 你们中的一个人能够引导我在正确的道路上,如果有一个?如果有这样的方式,我想通过基本的SQL查询开始。最终,我想通过SSRS(使用Visual Studio 2015中的SSDT)通过参数或过滤器构建报告,但我可以更多地了解这一点,因为我只是在学习它,并且正在阅读它。

非常感谢你提前

+0

这是一个很好的,写得很好的问题。但是,您可以通过为当前查询提供示例结果集,并显示您正在尝试完成的结果集来改进它。这将有助于其他人再现您的数据。 你说得对,这是一个比SSRS问题更多的SQL问题。 –

+0

你的意思是你想选择'PlatforName'吗?或者你能指定在这种情况下真正的问题是什么? – LONG

回答

1

您可以连接的平台整合到无论是在SQL或SSRS一个逗号分隔的字符串。

关于如何在SQL中执行此操作,只需搜索“For XML Path”即可。您可以使用LookupSetJoin的组合。

=Join(LookupSet(Fields!EmployeeId.Value, Fields!EmployeeId.Value, Fields!PlatformName.Value, "DataSet1"), ", ") 

前两个参数将是你想分组的字段。第三个是你将要连接的平台值。第四个参数是您的数据集名称。

如果您需要使列表不同,您需要在报告中添加一些自定义代码来处理该列表。您可以在LookupSet之前将该函数放入Join

+0

谢谢,我很快就会看看这个! – David