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

Sql 使用JOIN语句的结果连接另一个JOIN语句的结果,sql,sql-server,join,Sql,Sql Server,Join,我有以下两个Join语句: --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

我有以下两个Join语句:

--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

两个查询的结果都包括
零件号
(这些值相同)。我想
内部联接
对结果
零件号的两个查询的结果
。已经尝试了一段时间,但似乎无法获得正确的语法来执行此操作。

使用CREATE table#TempPartNum1和#TempPartNum2使用临时表


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

使用CREATE table#TempPartNum1和#TempPartNum2使用临时表


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

使用CREATE table#TempPartNum1和#TempPartNum2使用临时表


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

使用CREATE table#TempPartNum1和#TempPartNum2使用临时表

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

您也可以使用CTE(“公共表表达式”):

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

您也可以使用CTE(“公共表表达式”):

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

您也可以使用CTE(“公共表表达式”):

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

您也可以使用CTE(“公共表表达式”):


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

太好了!!!这是一个快速而简单的解决方案。而不是使用创建。。。我只是在第一个查询中使用INSERT-INTO#myfettebl,然后在第二个查询结束时删除了#myfetteable,并为将来制定了存储过程。感谢这一解决方案,我花了几年时间为Sybase(SQL的远亲)编写存储过程#临时表是解决和分解复杂程序任务的最常用方法。其他RDBMS风格(Oracle、MySQL等)应该采用不同的方法。这表明,在选择解决方案或方法之前,您确实需要了解您的工作环境(即SQL Server、Transact-SQL)!杰出的这是一个快速而简单的解决方案。而不是使用创建。。。我只是在第一个查询中使用INSERT-INTO#myfettebl,然后在第二个查询结束时删除了#myfetteable,并为将来制定了存储过程。感谢这一解决方案,我花了几年时间为Sybase(SQL的远亲)编写存储过程#临时表是解决和分解复杂程序任务的最常用方法。其他RDBMS风格(Oracle、MySQL等)应该采用不同的方法。这表明,在选择解决方案或方法之前,您确实需要了解您的工作环境(即SQL Server、Transact-SQL)!杰出的这是一个快速而简单的解决方案。而不是使用创建。。。我只是在第一个查询中使用INSERT-INTO#myfettebl,然后在第二个查询结束时删除了#myfetteable,并为将来制定了存储过程。感谢这一解决方案,我花了几年时间为Sybase(SQL的远亲)编写存储过程#临时表是解决和分解复杂程序任务的最常用方法。其他RDBMS风格(Oracle、MySQL等)应该采用不同的方法。这表明,在选择解决方案或方法之前,您确实需要了解您的工作环境(即SQL Server、Transact-SQL)!杰出的这是一个快速而简单的解决方案。而不是使用创建。。。我只是在第一个查询中使用INSERT-INTO#myfettebl,然后在第二个查询结束时删除了#myfetteable,并为将来制定了存储过程。感谢这一解决方案,我花了几年时间为Sybase(SQL的远亲)编写存储过程#临时表是解决和分解复杂程序任务的最常用方法。其他RDBMS风格(Oracle、MySQL等)应该采用不同的方法。这表明,在选择解决方案或方法之前,您确实需要了解您的工作环境(即SQL Server、Transact-SQL)!
;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