2011-08-09 45 views
0

我有以下查詢:如何獲得多個結果在1個記錄

SELECT 
,e.EmployeeCode 
,c.CompanyName 
,v.Violation 
FROM dbo.Employee e 
INNER JOIN dbo.Company c ON c.companyid = e.companyid 
INNER JOIN dbo.Violation v ON v.CompanyId = e.CompanyId AND v.EmployeeId = e.EmployeeId 

它返回類似如下的結果:

EmployeeCode CompanyName  Violation 
    1    Test   32 
    1    Test   12 
    2    ABC1   32 

行數(3)< ----不是部分的結果,只顯示我有的行數。

有沒有辦法返回結果呢?

EmployeeCode CompanyName Violation 
    1    Test   32 
            12 
    2    ABC1   32 

行計數(2)< ----結果的不一部分,只是示出的行我想要的數量。

基本上我希望它顯示在同一行中的cariage返回Violations。

我正在考慮使用FOR XML Path,但是這樣可以用回車嗎?我怎麼會這樣做呢?

+1

爲什麼在數據庫級別需要這種輸出?我會建議在應用程序級別上進行這樣的轉換,他們真的可以對某種報告有意義,例如 – sll

+0

我同意。我認爲這基本上是格式化,最好在代碼中完成或像sllev說。 – mikeY

+1

我想我可以在報告服務中做到這一點,如果這不是一個可行的解決方案,從數據庫中做到這一點。 – mameesh

回答

1

我會建議在應用程序級別進行這樣的轉換,這些轉換對於某些報告內容是非常有意義的。

1
select e.EmployeeCode, 
     c.CompanyName, 
     stuff((select char(13)+char(10)+v.Violation 
       from Violation as v 
       where v.CompanyID = e.CompanyID and 
        v.EmployeeID = e.CompanyID 
       for xml path(''), type).value('.', 'varchar(max)'), 1, 2, '') as Violation  
from Employee as e 
    inner join Company as c 
    on e.CompanyID = c.CompanyID