![](/img/trans.png)
[英]How to force a SQL statement to do a different select if a table is missing instead of throwing the 'invalid object name' error?
[英]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.