使用JOIN语句的结果来连接另一个JOIN语句的结果

时间:2014-07-22 18:49:37

标签: sql sql-server join

我有以下2个加入声明:

--Get Total Hrs
DECLARE @BeginDate datetime, @EndDate datetime
set @BeginDate = '01-01-2013'
set @EndDate  = '12-31-2013'
BEGIN
SELECT F.Type, E.Product, SUM(F.Hours * E.Amount) AS 'Total Hours' 
FROM Hours H
INNER JOIN Equipment E
ON F.SN = E.SN
WHERE (F.Date BETWEEN @BeginDate AND @EndDate)
GROUP BY F.Type, E.Product
ORDER BY  Product ASC
END

--Get Number of Unscheduled Removals
DECLARE @BeginDate1 datetime, @EndDate1 datetime
set @BeginDate1 = '01-01-2013'
set @EndDate1  = '12-31-2013'
BEGIN
SELECT LEFT(dbo.fn_GetPartName(R.PartID),CHARINDEX('-',dbo.fn_GetPartName(R.PartID), 1) - 1) AS 'Part No', 
Count(s.status) AS NumberUnscheduledRemovals
FROM Repair R
INNER JOIN Conversion C
ON  R.Performed = C.Performed 
AND R.Confirmed = C.Confirmed
INNER JOIN Status S
ON C.StatusID = S.StatusID
WHERE (R.Received BETWEEN @BeginDate1 AND @EndDate1)
AND (S.Status = 'UNSCHEDULED')
GROUP BY LEFT(dbo.fn_GetPartName(R.PartID),CHARINDEX('-',dbo.fn_GetPartName(R.PartID), 1) - 1)
ORDER BY LEFT(dbo.fn_GetPartName(R.PartID),CHARINDEX('-',dbo.fn_GetPartName(R.PartID), 1) - 1) ASC
END

两个查询都包含part numbers的结果(这些结果具有相同的值)。我想INNER JOIN生成part numbers的两个查询的结果{{1}}。已经尝试了一段时间,但似乎没有正确的语法来做到这一点。

2 个答案:

答案 0 :(得分:2)

使用CREATE TABLE#TempPartNum1& #TempPartNum2。

从前两个查询中获取所有相关数据并将它们放入临时表中,然后加入临时表。

答案 1 :(得分:1)

你也可以使用CTE(" Common Table Expression"):

;WITH QueryOne AS (
... put your first query here
), QueryTwo AS (
... put your second query here
) SELECT blah blah blah
  FROM QueryOne INNER JOIN QueryTwo ON foo = bar

CTE对于这样的事情非常方便。