簡體   English   中英

SELECT語句別名上的無效對象名稱錯誤

[英]Invalid object name error on SELECT statement alias

我編寫了一個SQL查詢,該查詢為兩個嵌套的SELECT語句中的每一個分配別名,並嘗試加入這些別名。

我的SQL查詢如下:

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

嘗試執行查詢時,出現錯誤:無效的對象名稱'Rec1'。

我已經嘗試了查詢組件子語句的各種安排和配置,但無濟於事。

有見識,建議將非常受歡迎。 感謝您的光臨。

我相信這是您想要的,而不是將子查詢移至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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM