2013-07-01 81 views
0

這可能是一個容易爲所有SQL專家...... 我有一個DB與3個主表和想加入兩個細節與表格的不同之結果集。請參閱下面的詳細信息...T-SQL查詢幫助:加入2個不同的詳細信息表

Customer 
------------- 
ID 
NAME 
... 

Projects 
------------- 
ID 
CustomerID 
ProjectName 
ProjectStatus 
... 

Orders 
------------- 
ID 
CusomterID 
OrderDate 
... 

現在,我願做一個查詢返回的所有誰擁有開放的項目(1個或多個)和他們的最後5個數量按客戶分組的客戶。

結果可能看起來像這樣

Customer1 
Project Build website 
Project Do SEO 
Orders: 
2013-04-13 10.000$ 
2012-01-20 5.000$ 
2011-10-11 2.000$ 

Customer2 
Project update system 

Orders: 
2012-01-20 5.000$ 
2011-10-11 2.000$ 

.... and so on 

所以訂單和項目沒有關係,他們可以不一定行相同。這是我卡住的地方,因爲查詢只返回一個包含所有子查詢總和的表。

或者它會更好地運行單獨的查詢?

我使用T-SQL與SERVER 2008R2。

也許我只是想以複雜的,但任何幫助將是非常美妙......

+0

是否有你不希望這樣做在Reporting Services的原因是什麼? –

+0

如何連接項目和訂單表?我沒有看到相關的專欄。 – Justin

+0

@Justin:他們不是(除了通過客戶) - *「訂單和項目沒有關係」*。 –

回答

0

類似的東西:

SELECT c.NAME, 
     p.ProjectName, 
     o.* 
FROM Customer c 
LEFT JOIN Projects p 
    ON p.CustomerID = c.ID 
LEFT JOIN Orders o 
    ON o.CusomterID = c.ID 
WHERE p.ProjectStatus = 'Open' 
AND o.ID IN (SELECT TOP 5 o2.ID 
      FROM Orders o2 
      WHERE o2.CusomterID = c.ID 
      ORDER BY o2.OrderDate Desc) 
0

輸出(的格式問題,如客戶的標題,項目章節標題,訂購部分標題等)最好在應用層處理(例如,在SSRS報告,ASP等內)。

可以返回所有數據這樣在一個單一的查詢所需的:

select c.NAME CustomerName, sq.* 
from Customers c 
join (select CustomerID, ID ProjectID, ProjectName, ProjectStatus, 
      'Projects' RecType, null OrderID, null OrderDate, null OrderValue 
     from Projects 
     union all 
     select CustomerID, null ProjectID, null ProjectName, null ProjectStatus, 
      'Orders' RecType, ID OrderID, OrderDate, OrderValue 
     from Orders) sq 
    on c.ID = sq.CustomerID 
order by sq.CustomerID, sq.RecType desc, sq.ProjectID, sq.OrderID