永发信息网

一段很复杂很复杂的SQL语句。。求大神解释。。。

答案:3  悬赏:80  手机版
解决时间 2021-02-20 19:51
我只想知道到底那个select跟哪个from的。。好乱,完全不知道那些select想找的是什麼东西。。。跪求大神解释。。
最佳答案
Select

From 
(
Select 
*
From 
(
Select
Number
,ChineseName
,tb1.DepartmentCode
,DepartmentName
,ShiftId
,ShiftName
,Degree
,AskForLeaveType
,WorkOnDate
,OnDutyType
,StartTime
,EndTime
,AOnDuty
,AOffDuty
,Allday
,tb1.SumTotal
,'Error'= 
Case 
When Degree=1 AND StartTime<=AOnDuty AND EndTime<=AOnDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0 
When Degree=1 AND StartTime>=AOffDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0 
When Degree=1 AND StartTime>=WorkOnDate+' '+'12:30' AND EndTime <= WorkOnDate+' '+'13:30' AND Charindex('常白班',ShiftName)>0 AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When Degree=2 AND StartTime<=AOnDuty AND EndTime<=AOnDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When Degree=2 AND StartTime>=AOffDuty AND EndTime<=BOnDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When Degree=2 AND StartTime>=BOffDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When Degree=3 AND StartTime<=AOnDuty AND EndTime<=AOnDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When Degree=3 AND StartTime>=AOffDuty AND EndTime<=BOnDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When Degree=3 AND StartTime>=BOffDuty AND EndTime<=COnDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When Degree=3 AND StartTime>=COffDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0
When ShiftId=0 AND Left(AskForLeaveType,1)='0' Then 0
When ShiftId>0 AND Left(AskForLeaveType,1)<>'0' AND Left(OnDutyType,1)=0 Then 0
When ShiftId>0 AND Left(AskForLeaveType,1)<>'0' AND Left(OnDutyType,1)=2 AND AskForLeaveType='出差假' Then 0
When ShiftId>0 AND Left(AskForLeaveType,1)<>'0' AND Left(OnDutyType,1)=2 AND AskForLeaveType='产假' Then 0
When ShiftId=0 AND Left(AskForLeaveType,1)<>'0' AND Convert(varchar(10),StartTime,108)='00:00:00' AND Convert(varchar(10),EndTime,108)='00:30:00' Then 0
Else

End
From
(
Select
Number
,ChineseName
,DepartmentName
,d.DepartmentCode
,p.ShiftId
,p.ShiftName
,Degree
,AskForLeaveType
,Convert(varchar(10),WorkOnDate,120) as 'WorkOnDate'
,StartTime
,EndTime
,AllDay
,SumTotal
,Case When Right(Convert(Varchar(10),WorkOnDate,120),5) IN (select Right(Convert(Varchar(10),HolidayDate,120),5) From AttendanceHoliday) THEN '2 - 公众假上班' ELSE '0 - 平时上班' END AS 'OnDutyType'
,Case When Left(FristBrushDate,1)='1' AND Convert(varchar(10),AOffDuty,120)>Convert(varchar(10),AOnDuty,120) Then CAST(Convert(Varchar(11),Dateadd(dd,-1,OnDutyDate),120)+Convert(Varchar(5),AOnDuty,108) AS DateTime) ELSE CAST(Convert(Varchar(11),OnDutyDate,120)+Convert(Varchar(5),AOnDuty,108) AS DateTime) End AS 'AOnDuty'
,Case When Left(FristBrushDate,1)='0' AND Convert(varchar(10),AOnDuty,120) ,CAST(Convert(Varchar(11),OnDutyDate,120)+Convert(Varchar(5),BOnDuty,108) AS DateTime) AS 'BOnDuty'
,CAST(Convert(Varchar(11),OnDutyDate,120)+Convert(Varchar(5),BOffDuty,108) AS DateTime) AS 'BOffDuty'
,CAST(Convert(Varchar(11),OnDutyDate,120)+Convert(Varchar(5),COnDuty,108) AS DateTime) AS 'COnDuty'
,CAST(Convert(Varchar(11),OnDutyDate,120)+Convert(Varchar(5),COffDuty,108) AS DateTime) AS 'COffDuty'
From
Employees e INNER JOIN Departments d on e.DepartmentCode=d.DepartmentCode
INNER JOIN AttendanceAskForLeave a on e.Employeeid=a.Employeeid
INNER JOIN AttendanceSpell p on a.Employeeid=p.Employeeid and a.WorkOndate=p.OnDutyDate
LEFT JOIN AttendanceShifts s on p.Shiftid=s.Shiftid
) tb1
) tb2 Where Error=1

UNIOn ALL

Select 
Number
,ChineseName
,DepartmentCode
,DepartmentName
,ShiftId
,ShiftName
,Degree
,AskForLeaveType
,WorkOnDate
,Case When Right(Convert(Varchar(10),WorkOnDate,120),5) IN (select Right(Convert(Varchar(10),HolidayDate,120),5) from AttendanceHoliday) THEN '2 - 公众假上班' ELSE '0 - 平时上班' END AS 'OnDutyType'
,StartTime
,EndTime
,AOnDuty
,AOffDuty
,Allday
,SumTotal
,Error
From
(
Select 
Number
,ChineseName
,d.DepartmentCode
,DepartmentName
,p.ShiftId
,p.ShiftName
,Degree
,AskForLeaveType
,WorkOnDate
,StartTime
,EndTime
,Sumtotal
,NULL AS 'AOnDuty'
,NULL AS 'AOffDuty'
,AllDay
,1 AS 'Error'
From 
AttendanceAskForLeave a 
LEFT JOIN Employees e ON a.Employeeid=e.Employeeid 
LEFT JOIN Departments d ON e.DepartmentCode=d.DepartmentCode
LEFT JOIN AttendanceSpell p ON a.Employeeid=p.Employeeid AND a.WorkOnDate=p.OnDutyDate
LEFT JOIN AttendanceShifts s ON p.ShiftId=s.ShiftId
Where 
Left(IncumbencyStatus,1)<>1
Group by 
Number,ChineseName,d.DepartmentCode,DepartmentName,p.ShiftId,p.ShiftName,Degree,AskForLeaveType,AllDay,WorkOnDate,StartTime,EndTime,Sumtotal 
having 
Count(1)>1
) tb3
) tb4对你的代码格式化后发现,还缺少一些语句,你是否粘贴完整了?
读完SQL语句后发现,其实是一个考勤核算的查询语句,是两个大的SQL查询Union ALL的结果
全部回答
你的sql语句呢?
语句: if exists(select 1 from a where xxid = a and c=b) begin delete b where xxid =a and 其他条件 ---这里改成正确的列名和正确的判断条件 delete c where xxid =a and 其他条件 ---这里改成正确的列名和正确的判断条件 ... end
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请你分别填上一个表示看的词语.(不能重复)1:
陇西清真西大寺我想知道这个在什么地方
我是女生初三但想学篮球,怎么学呢?报兴趣班
快递慢造成顾客退款快递有责任吗
某山区坡地生态环境破坏严重,人们对其进行了
银川市西夏区康复药店地址有知道的么?有点事
烟台高铁在哪坐车
朋友开幼儿园送什么礼品好
至2014年中国有多少世界文化遗产
从常德到南昌的汽车是进入哪个汽车站
解释下离合器和各个档位的关系!
安徽新东方烹饪学校要初中毕业证吗?
嘉益堂医药连锁外滩明珠分店在什么地方啊,我
外地公司怎么申请劳动仲裁?
满屋灰尘的反义词是什么?求学霸指点!
推荐资讯
王家边我想知道这个在什么地方
找规律:根号【2除3】,根号6除3,根号【4除9】
sun.jnu.encoding=UTF-8可以修改吗
关东散酒兴超市地址有知道的么?有点事想过去
32层的高层,20层好吗,房子走向不太好,西晒
博伦眼镜连锁怎么去啊,有知道地址的么
定州生活频道直播民生主持人叫什么名字?
朱记小眼镜蒸饭地址在什么地方,想过去办事
一邻居哥们儿晚上来我家串门,总呆到很晚也不
那八种花有毒不能放在
金屋雅园我想知道这个在什么地方
对象A里有一个list类型的属性b,那么实例化A
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?