T-SQL查询帮助:连接两个不同的明细表

T-SQL查询帮助:连接两个不同的明细表,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,对于所有SQL专家来说,这可能是一个简单的问题。。。 我有一个包含3个主表的DB,我想用不同的结果集总和连接两个详细表。请参阅下面的详细信息 Customer ------------- ID NAME ... Projects ------------- ID CustomerID ProjectName ProjectStatus ... Orders ------------- ID CusomterID OrderDate ... 现在,我想做一个查询,返回所有有未完成项目(1个或

对于所有SQL专家来说,这可能是一个简单的问题。。。 我有一个包含3个主表的DB,我想用不同的结果集总和连接两个详细表。请参阅下面的详细信息

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与服务器2008R2一起使用

也许我只是想找一个更复杂的人,但任何帮助都会很棒……

诸如此类:

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)

输出的格式(如客户标题、项目部分标题、订单部分标题等)最好在应用程序层处理(例如,在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

您不想在Reporting Services中这样做有什么原因吗?项目和订单表是如何连接的?我看不到相关的栏目。@Justin:它们不是(除了via Customer)-“订单和项目没有关系”。如果它们没有连接,如果客户有多个打开的项目,那么每个项目都会复制相同的5个订单。因为我在你想要的结果和项目信息中看到…显示内容应该在你的应用程序/显示层中处理。像这样构建报告(按客户细分)不是一件容易的事情,也不是最好在数据库中完成的事情。