如何将子查询与多个表一起使用

时间:2012-10-31 22:11:40

标签: sql sql-server-2005

我正在尝试创建一个子查询来将两个表放在一起,但什么都没有。

代码:

SELECT DISTINCT Agreements.AgrmntID, Agreements.Status, JobSites.SiteName,
  PurchaseOrderDetails.ExtCost
FROM Agreements Inner Join
  JobSites On Agreements.CustSiteID = JobSites.CustSiteID
WHERE Agreements.Status = 2 And PurchaseOrderDetails.ExtCost = (Select
    PurchaseOrderDetails.ExtCost
  FROM PurchaseOrderDetails 
  Inner Join PurchaseOrders On PurchaseOrders.POID = PurchaseOrderDetails.POID
  WHERE PurchaseOrders.Description Like ('%', JobSites.SiteName, '%') And   
  Convert(varchar(8),PurchaseOrderDetails.TimeCreated,1) = '09/10/12')
ORDER BY JobSites.SiteName

预期产出:

AgreemntID   Status  SiteName  ExtCost
----------------------------------------
1            2       TEST01    $144.00
2            2       TEST02    $400.00

我正在使用子查询,因为除了PurchaseOrders下的描述之外,什么都没有将ExtCost链接到SiteName。

希望这对您有足够的帮助。提前谢谢!!

2 个答案:

答案 0 :(得分:0)

在您编写问题时不确定这是否只是一个拼写错误,但在您的SQL中指定Agreements.Status = 2,但在您的示例中,您期望状态3的结果?

否则,我会先测试您的个别子查询,以确保您的数据符合您的预期格式,例如尝试运行

Select
    PurchaseOrderDetails.ExtCost
  FROM PurchaseOrderDetails 
  Inner Join PurchaseOrders On PurchaseOrders.POID = PurchaseOrderDetails.POID
  WHERE PurchaseOrders.Description Like ('%', JobSites.SiteName, '%') And   
  Convert(varchar(8),PurchaseOrderDetails.TimeCreated,1) = '09/10/12'

看看你得到了什么等等。

答案 1 :(得分:0)

如果我认为我理解你想要做什么,你可以使用像这样的外部应用

SELECT DISTINCT A.AgrmntID, A.Status, JobSites.SiteName,
  PurchaseOrderDetails.ExtCost
FROM Agreements A 
Join JobSites J On J.CustSiteID = A.CustSiteID
OUTER APPLY(Select P.ExtCost From 
PurchaseOrders PO
JOIN PurchaseOrderDetails POD ON POD.POID = PO.POID
Where PO.Description Like ('%', JobSites.SiteName, '%') And   
  Convert(varchar(8),PurchaseOrderDetails.TimeCreated,1) = '09/10/12') POD
WHERE A.Status = 2 AND POD.ExtCost IS NOT NULL
ORDER BY JobSites.SiteName