2016-09-22 8 views
0

2つのネストされたSELECTステートメントのそれぞれにエイリアスを割り当て、これらのエイリアスへの結合を試みるSQLクエリを作成しました。無効なオブジェクト名「REC1」:SELECTステートメントエイリアスで無効なオブジェクト名エラー

クエリを実行しようとオン
SELECT EmpID, 
     (SELECT EmpID 
       ,Count(*) * 8 AS [FullDayHours] 
     FROM [database].[dbo].[tblLogTimes] 
     WHERE ActivityID = 43 
     AND WorkDate BETWEEN '2015-12-31 00:00:00.000' AND '2016-09-30 00:00:00.000' 
     GROUP BY EmpID) AS [Rec1] 
     ,(SELECT EmpID 
       ,(Count(*) * 4) AS [HalfDayHours] 
     FROM [database].[dbo].[tblLogTimes] 
     WHERE ActivityID = 44 
     AND WorkDate BETWEEN '2015-12-31 00:00:00.000' AND '2016-09-30 00:00:00.000' 
     GROUP BY EmpID) AS [Rec2] 
FROM [database].[dbo].[tblLogTimes] E 
INNER JOIN [Rec1] ON E.EmpID = [Rec1].EmpID 
INNER JOIN [Rec2] ON E.EmpID = [Rec2].EmpID 

、私はエラーを経験している:次のように

私のSQLクエリがあります。

私は、クエリコンポーネントのサブステートメントのさまざまな構成と構成を試しましたが、役に立たないものです。

洞察力、アドバイスは大歓迎です。 ありがとうございます。

答えて

3

私はこれがあなたの代わりにjoinにサブクエリを移動した後ているものであると信じて:

SELECT EmpID, FullDayHours, HalfDayHours 
FROM [StaffSuite].[dbo].[tblLogTimes] E 
INNER JOIN (SELECT EmpID 
       ,Count(*) * 8 AS [FullDayHours] 
     FROM [StaffSuite].[dbo].[tblLogTimes] 
     WHERE ActivityID = 43 
     AND WorkDate BETWEEN '2015-12-31 00:00:00.000' AND '2016-09-30 00:00:00.000' 
     GROUP BY EmpID) AS [Rec1] ON E.EmpID = [Rec1].EmpID 
INNER JOIN (SELECT EmpID 
       ,(Count(*) * 4) AS [HalfDayHours] 
     FROM [StaffSuite].[dbo].[tblLogTimes] 
     WHERE ActivityID = 44 
     AND WorkDate BETWEEN '2015-12-31 00:00:00.000' AND '2016-09-30 00:00:00.000' 
     GROUP BY EmpID) AS [Rec2] ON E.EmpID = [Rec2].EmpID 

は、しかし、あなたがそれをさらに簡素化するためにconditional aggregationを使用することができます。

SELECT EmpID, FullDayHours, HalfDayHours 
FROM [StaffSuite].[dbo].[tblLogTimes] E 
INNER JOIN (SELECT EmpID 
       ,Count(case when activityid = 43 then 1 end) * 8 AS [FullDayHours] 
       ,Count(case when activityid = 44 then 1 end) * 4 AS [HalfDayHours] 
     FROM [StaffSuite].[dbo].[tblLogTimes] 
     WHERE ActivityID IN (43,44) 
     AND WorkDate BETWEEN '2015-12-31 00:00:00.000' AND '2016-09-30 00:00:00.000' 
     GROUP BY EmpID) AS [Rec1] ON E.EmpID = [Rec1].EmpID 
+0

賢いソリューションを、ありがとうsgeddes .. –

関連する問題