子查询返回的值不止一个怎么解决.

禁用F3 2011-06-04 02:16:18

select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2))
FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber
)
from
(
select num=count(*),Numbers,EmployeesStatus,AbsenteeismHours from EmployeesAttendance
where DateMonths between (convert(varchar(8),'2011-05-01 00:00:00.000' ,120)+'01' ) and convert(char(10),dateadd(d,-1,convert(char(7),dateadd(m,1,'2011-05-01 00:00:00.000'),120)+ '-01 '),120)
group by Numbers,EmployeesStatus,AbsenteeismHours
) temp
group by Numbers

提示:
Msg 512, Level 16, State 1, Line 1
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
...全文
1027 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
禁用F3 2011-06-04
  • 打赏
  • 举报
回复
换了一个种思路已经解决了...
谢谢各位
君_洛洛 2011-06-04
  • 打赏
  • 举报
回复
--我是要求这个语句的COUNT
select COUNT(1) FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber

这就是COUNT,只不过放子查询后,要关联外面的NUMBERS,
禁用F3 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 janely318 的回复:]
引用 13 楼 chirea 的回复:
引用 12 楼 janely318 的回复:
引用 11 楼 chirea 的回复:
引用 10 楼 janely318 的回复:
再试试吧,你里面如果不分NUMBERS统计,也不会出错,就是总的,你看起来不对,子查询里面统计,如果不分组不会出错,如果要分组,肯定就有多笔记录,当然就报错了,

有点明白.可你这样修改的,不能以后面一个子查询为条件……
[/Quote]

看来我的表达能力太差了...

--我是要求这个语句的COUNT
select 员工旷工=cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2))
FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber

君_洛洛 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 chirea 的回复:]
引用 12 楼 janely318 的回复:
引用 11 楼 chirea 的回复:
引用 10 楼 janely318 的回复:
再试试吧,你里面如果不分NUMBERS统计,也不会出错,就是总的,你看起来不对,子查询里面统计,如果不分组不会出错,如果要分组,肯定就有多笔记录,当然就报错了,

有点明白.可你这样修改的,不能以后面一个子查询为条件呢.这样把所有计算查询出来了...不能以我……
[/Quote]
晕,那就求COUNT

select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=
(
--这个子查询是OK的.我怎么让这里可以统计.
select COUNT(1) FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber AND EmployeesAttendance .NUMBERS=TEMP.NUMBERS )
from
(
select num=count(*),Numbers,EmployeesStatus,AbsenteeismHours from EmployeesAttendance
where DateMonths between (convert(varchar(8),'2011-05-01 00:00:00.000' ,120)+'01' ) and convert(char(10),dateadd(d,-1,convert(char(7),dateadd(m,1,'2011-05-01 00:00:00.000'),120)+ '-01 '),120)
group by Numbers,EmployeesStatus,AbsenteeismHours
) temp
group by Numbers
禁用F3 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 janely318 的回复:]
引用 11 楼 chirea 的回复:
引用 10 楼 janely318 的回复:
再试试吧,你里面如果不分NUMBERS统计,也不会出错,就是总的,你看起来不对,子查询里面统计,如果不分组不会出错,如果要分组,肯定就有多笔记录,当然就报错了,

有点明白.可你这样修改的,不能以后面一个子查询为条件呢.这样把所有计算查询出来了...不能以我后面的日期条件来判断了

已经根据你的条件把……
[/Quote]
可这样关联SUM了.
我不是汇总,我是需要在一个下面temp临时表里面的number 旷工记录有多少条.
君_洛洛 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chirea 的回复:]
引用 10 楼 janely318 的回复:
再试试吧,你里面如果不分NUMBERS统计,也不会出错,就是总的,你看起来不对,子查询里面统计,如果不分组不会出错,如果要分组,肯定就有多笔记录,当然就报错了,

有点明白.可你这样修改的,不能以后面一个子查询为条件呢.这样把所有计算查询出来了...不能以我后面的日期条件来判断了
[/Quote]
已经根据你的条件把NUMBERS关联了,所以才正确
禁用F3 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 janely318 的回复:]
再试试吧,你里面如果不分NUMBERS统计,也不会出错,就是总的,你看起来不对,子查询里面统计,如果不分组不会出错,如果要分组,肯定就有多笔记录,当然就报错了,
[/Quote]
有点明白.可你这样修改的,不能以后面一个子查询为条件呢.这样把所有计算查询出来了...不能以我后面的日期条件来判断了
君_洛洛 2011-06-04
  • 打赏
  • 举报
回复
select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=SUM(cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2)))
FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber AND EmployeesAttendance .NUMBERS=TEMP.NUMBERS )
from
(
select num=count(*),Numbers,EmployeesStatus,AbsenteeismHours from EmployeesAttendance
where DateMonths between (convert(varchar(8),'2011-05-01 00:00:00.000' ,120)+'01' ) and convert(char(10),dateadd(d,-1,convert(char(7),dateadd(m,1,'2011-05-01 00:00:00.000'),120)+ '-01 '),120)
group by Numbers,EmployeesStatus,AbsenteeismHours
) temp
group by Numbers


再试试吧,你里面如果不分NUMBERS统计,也不会出错,就是总的,你看起来不对,子查询里面统计,如果不分组不会出错,如果要分组,肯定就有多笔记录,当然就报错了,

禁用F3 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xyctc 的回复:]
SQL code
and EmployeesAttendance .numbers=temp.numbers


不知道表结构,猜得,可以试试
[/Quote]
嘿嘿.我已试过不行提示一样的.


Numbers 事假 旷工天数
-------------------------------------------------- ----------- ---------------------------------------
Msg 512, Level 16, State 1, Line 1
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。


Billy 2011-06-04
  • 打赏
  • 举报
回复
and EmployeesAttendance .numbers=temp.numbers


不知道表结构,猜得,可以试试
禁用F3 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 janely318 的回复:]
SQL code
select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=SUM(cas……
[/Quote]
一样,
group by ClassNumber
Msg 209, Level 16, State 1, Line 7
列名 'ClassNumber' 不明确。

同时能告诉我哪出问题了吗?你是为什么想到这样的?
君_洛洛 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 janely318 的回复:]
SQL code
select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=SUM(cas……
[/Quote]
那个子查询与外面的都关联不了,你拿出来跟外面的关联想来,我加了分组其实还是会报错,汗,不分组是总的一个值不会出错
君_洛洛 2011-06-04
  • 打赏
  • 举报
回复
select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=SUM(cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2)))
FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber group by ClassNumber
)
from
(
select num=count(*),Numbers,EmployeesStatus,AbsenteeismHours from EmployeesAttendance
where DateMonths between (convert(varchar(8),'2011-05-01 00:00:00.000' ,120)+'01' ) and convert(char(10),dateadd(d,-1,convert(char(7),dateadd(m,1,'2011-05-01 00:00:00.000'),120)+ '-01 '),120)
group by Numbers,EmployeesStatus,AbsenteeismHours
) temp
group by Numbers
禁用F3 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xyctc 的回复:]
SQL code
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2))
FROM EmployeesAttendance inner JOIN ClassManage ON Em……
[/Quote]

and xxx.numbers=temp.numbers
xxx.要为哪个表呢?
禁用F3 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 janely318 的回复:]
SQL code
select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=SUM(
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=cas……
[/Quote]
也是报错...
Msg 130, Level 15, State 1, Line 1
不能对包含聚合或子查询的表达式执行聚合函数。
Billy 2011-06-04
  • 打赏
  • 举报
回复
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2))
FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber
)

如果上述实例子查询结果是多条记录,就会出这样的错误提示,若加上一个与TEMP 表的连接条件不会出错。
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2))
FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber adn xxx.numbers=temp.numbers
)
君_洛洛 2011-06-04
  • 打赏
  • 举报
回复
select distinct Numbers,
事假=sum(case when EmployeesStatus =1 then num else 0 end),--统计事件这里没问题.我不知道旷工这里如何去统计.我下面的子查询没问题.这里不是熟.望各位解释一下.
旷工天数=SUM(
(
--这个子查询是OK的.我怎么让这里可以统计.
select 员工旷工=cast(( EmployeesAttendance.AbsenteeismHours/ClassManage.fullTime) as decimal(5,2))
FROM EmployeesAttendance inner JOIN ClassManage ON EmployeesAttendance.ClassNumber=ClassManage.ClassNumber
) )
from
(
select num=count(*),Numbers,EmployeesStatus,AbsenteeismHours from EmployeesAttendance
where DateMonths between (convert(varchar(8),'2011-05-01 00:00:00.000' ,120)+'01' ) and convert(char(10),dateadd(d,-1,convert(char(7),dateadd(m,1,'2011-05-01 00:00:00.000'),120)+ '-01 '),120)
group by Numbers,EmployeesStatus,AbsenteeismHours
) temp
group by Numbers

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧