a841983507 2017-10-26 09:51 采纳率: 0%
浏览 2421

SQL报错 子查询返回的值不止一个。

子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
select * FROM
(select tmpppp.考勤类型,isnull(tmppp.人数,0) 人数 from
(select CASE WHEN isnull((select FACTORYNO FROM tblSMDFactoryBasis), 0)=1 THEN '正常' end 考勤类型)tmpppp
left join
(select '正常' as 考勤类型,sum(tmpp.正常) 人数
from (
select TMP.USERNO,MIN(TMP.上工时间) 最早上工时间,'考勤' as 考勤,
'迟到'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)>CONVERT(varchar(20),'07:40:00',13) THEN 1 END,
'正常'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)<=CONVERT(varchar(20),'07:40:00',13) THEN 1 END
FROM
(select A.LOGINPLACENO,C.equipmentname 设备名称,B.USERNO,B.USERNAME 员工姓名,A.LOGINDATE
,CONVERT(varchar(5) , A.LOGINDATE, 101) 上工日期,CONVERT(varchar(5) , A.LOGINDATE, 108) 上工时间
FROM TBLWIPOPERATORSTATE A,tblUSRUserBasis B,tblEQPEquipmentBasis C
WHERE A.USERNO=B.USERNO AND C.EQUIPMENTNO=A.LOGINPLACENO
AND CONVERT(varchar(5) , A.LOGINDATE, 101)=CONVERT(varchar(5) , getdate(), 101)
AND B.DEPARTMENTNO='109200') TMP
GROUP BY TMP.USERNO ) tmpp group by tmpp.考勤)tmppp on tmpppp.考勤类型=tmppp.考勤类型
UNION ALL
select tmpppp.考勤类型,isnull(tmppp.人数,0) 人数 from
(select CASE WHEN isnull((select FACTORYNO FROM tblSMDFactoryBasis), 0)=1 THEN '迟到' end 考勤类型)tmpppp
left join
(select '迟到' as 考勤类型,sum(tmpp.迟到) 人数
from (
select TMP.USERNO,MIN(TMP.上工时间) 最早上工时间,'考勤' as 考勤,
'迟到'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)>CONVERT(varchar(20),'07:40:00',13) THEN 1 END,
'正常'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)<=CONVERT(varchar(20),'07:40:00',13) THEN 1 END
FROM
(select A.LOGINPLACENO,C.equipmentname 设备名称,B.USERNO,B.USERNAME 员工姓名,A.LOGINDATE
,CONVERT(varchar(5) , A.LOGINDATE, 101) 上工日期,CONVERT(varchar(5) , A.LOGINDATE, 108) 上工时间
FROM TBLWIPOPERATORSTATE A,tblUSRUserBasis B,tblEQPEquipmentBasis C
WHERE A.USERNO=B.USERNO AND C.EQUIPMENTNO=A.LOGINPLACENO
AND CONVERT(varchar(5) , A.LOGINDATE, 101)=CONVERT(varchar(5) , getdate(), 101)
AND B.DEPARTMENTNO='109200') TMP
GROUP BY TMP.USERNO ) tmpp group by tmpp.考勤)tmppp on tmpppp.考勤类型=tmppp.考勤类型
UNION ALL
select total.考勤类型 ,(sum(a.人数)/2-sum(total.人数))人数
from
(select '缺勤' as 考勤类型,isnull(tmppp.人数,0) 人数 from
(select CASE WHEN isnull((select FACTORYNO FROM tblSMDFactoryBasis), 0)=1 THEN '正常' end 考勤类型)tmpppp
left join
(select '正常' as 考勤类型,sum(tmpp.正常) 人数
from (
select TMP.USERNO,MIN(TMP.上工时间) 最早上工时间,'考勤' as 考勤,
'迟到'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)>CONVERT(varchar(20),'07:40:00',13) THEN 1 END,
'正常'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)<=CONVERT(varchar(20),'07:40:00',13) THEN 1 END
FROM
(select A.LOGINPLACENO,C.equipmentname 设备名称,B.USERNO,B.USERNAME 员工姓名,A.LOGINDATE
,CONVERT(varchar(5) , A.LOGINDATE, 101) 上工日期,CONVERT(varchar(5) , A.LOGINDATE, 108) 上工时间
FROM TBLWIPOPERATORSTATE A,tblUSRUserBasis B,tblEQPEquipmentBasis C
WHERE A.USERNO=B.USERNO AND C.EQUIPMENTNO=A.LOGINPLACENO
AND CONVERT(varchar(5) , A.LOGINDATE, 101)=CONVERT(varchar(5) , getdate(), 101)
AND B.DEPARTMENTNO='109200') TMP
GROUP BY TMP.USERNO ) tmpp group by tmpp.考勤)tmppp on tmpppp.考勤类型=tmppp.考勤类型
UNION ALL
select '缺勤' as 考勤类型,isnull(tmppp.人数,0) 人数 from
(select CASE WHEN isnull((select FACTORYNO FROM tblSMDFactoryBasis), 0)=1 THEN '迟到' end 考勤类型)tmpppp
left join
(select '迟到' as 考勤类型,sum(tmpp.迟到) 人数
from (
select TMP.USERNO,MIN(TMP.上工时间) 最早上工时间,'考勤' as 考勤,
'迟到'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)>CONVERT(varchar(20),'07:40:00',13) THEN 1 END,
'正常'=case WHEN CONVERT(varchar(20),MIN(TMP.上工时间) ,13)<=CONVERT(varchar(20),'07:40:00',13) THEN 1 END
FROM
(select A.LOGINPLACENO,C.equipmentname 设备名称,B.USERNO,B.USERNAME 员工姓名,A.LOGINDATE
,CONVERT(varchar(5) , A.LOGINDATE, 101) 上工日期,CONVERT(varchar(5) , A.LOGINDATE, 108) 上工时间
FROM TBLWIPOPERATORSTATE A,tblUSRUserBasis B,tblEQPEquipmentBasis C
WHERE A.USERNO=B.USERNO AND C.EQUIPMENTNO=A.LOGINPLACENO
AND CONVERT(varchar(5) , A.LOGINDATE, 101)=CONVERT(varchar(5) , getdate(), 101)
AND B.DEPARTMENTNO='109200') TMP
GROUP BY TMP.USERNO ) tmpp group by tmpp.考勤)tmppp on tmpppp.考勤类型=tmppp.考勤类型) total
,(select '缺勤' as 考勤类型,count(*) 人数 from tblUSRUserBasis where departmentno=109200 group by departmentno/*考勤总人数表*/) a
where a.考勤类型=total.考勤类型
group by total.考勤类型)A
WHERE 1=1

  • 写回答

2条回答 默认 最新

  • lPsycongroo 2017-10-27 10:33
    关注

    太长,sql写得这么复杂看不下去。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。