2016-09-22 2 views
0

Ich habe eine SQL-Abfrage geschrieben, die jedem der beiden geschachtelten SELECT-Anweisungen einen Alias ​​zuweist und versucht, auf diese Aliase beizutreten.Ungültiger Objektname Fehler bei SELECT-Anweisung Alias ​​

My SQL-Abfrage ist wie folgt:

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 

Auf der versuchten Ausführung der Abfrage, ich bin ein Fehler auftritt: Ungültige Objektnamen ‚Rec1‘.

Ich habe verschiedene Anordnungen und Konfigurationen der Query-Komponenten-Unteranweisungen ausprobiert, aber ohne Erfolg.

Einblicke, Beratung wäre sehr willkommen. Danke fürs schauen.

Antwort

3

Ich glaube, das ist, was Sie stattdessen nach den Unterabfragen zum join bewegen:

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 

Allerdings könnten Sie conditional aggregation es weiter zu vereinfachen verwenden:

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

Clevere Lösung, Danke sgeddes .. –

Verwandte Themen