group by 为什么出错?
DECLARE @BeginTime DATETIME
DECLARE @EndTime datetime
SET @BeginTime = '2006-1-1 08:00:00'
SET @EndTime = '2006-1-2 08:00:00'
DECLARE @CenterID Integer --中心编码
set @CenterID=1
--设置白班,中班,夜班
DECLARE @daystart varchar(8) --白班起始时间
set @daystart='08:00:00'
DECLARE @midstart varchar(8) --中班起始时间
set @midstart='12:00:00'
DECLARE @midend varchar(8) --晚班起始时间
set @midend='18:00:00'
-----------------------------------------------------------------------------------
---------中心日报统计
SET NOCOUNT ON
SELECT
时间段 = case when (DatePart(Hour,TAL.首次受理时刻)>=0 and DatePart(Hour,TAL.首次受理时刻)<2) then '00-02H'
when (DatePart(Hour,TAL.首次受理时刻)>=2 and DatePart(Hour,TAL.首次受理时刻)<4) then '02-04H'
when (DatePart(Hour,TAL.首次受理时刻)>=4 and DatePart(Hour,TAL.首次受理时刻)<6) then '04-06H'
when (DatePart(Hour,TAL.首次受理时刻)>=6 and DatePart(Hour,TAL.首次受理时刻)<8) then '06-08H'
when (DatePart(Hour,TAL.首次受理时刻)>=8 and DatePart(Hour,TAL.首次受理时刻)<10) then '08-10H'
when (DatePart(Hour,TAL.首次受理时刻)>=10 and DatePart(Hour,TAL.首次受理时刻)<12) then '10-12H'
when (DatePart(Hour,TAL.首次受理时刻)>=12 and DatePart(Hour,TAL.首次受理时刻)<14) then '12-14H'
when (DatePart(Hour,TAL.首次受理时刻)>=14 and DatePart(Hour,TAL.首次受理时刻)<16) then '14-16H'
when (DatePart(Hour,TAL.首次受理时刻)>=16 and DatePart(Hour,TAL.首次受理时刻)<18) then '16-18H'
when (DatePart(Hour,TAL.首次受理时刻)>=18 and DatePart(Hour,TAL.首次受理时刻)<20) then '18-20H'
when (DatePart(Hour,TAL.首次受理时刻)>=20 and DatePart(Hour,TAL.首次受理时刻)<22) then '20-22H'
when (DatePart(Hour,TAL.首次受理时刻)>=22 and DatePart(Hour,TAL.首次受理时刻)<24) then '22-24H'
else '未知时间段' end,
-- 病家退车 = CASE when tt.中止任务原因编码 = 1 then 1 else 0 end,
病家退车 = sum(CASE when tt.中止任务原因编码 = 1 then 1 else 0 end),
-- 普通车 = CASE WHEN Tam.车辆类型编码 =1 THEN 1 ELSE 0 END,
-- 抢救车 = CASE WHEN Tam.车辆类型编码 <>1 THEN 1 ELSE 0 END,
派救护车次数 = sum(CASE WHEN Tam.车辆类型编码 =1 THEN 1 ELSE 0 END)+sum( CASE WHEN Tam.车辆类型编码 <>1 THEN 1 ELSE 0 END),
-- 转院 = CASE when (TAl.事件类型编码 = 3 ) then 1 else 0 end,
转院 = sum(CASE when (TAl.事件类型编码 = 3 ) then 1 else 0 end),
-- 其它 = CASE when (TAl.事件类型编码 <> 3 ) then 1 else 0 end,
其它 = sum(CASE when (TAl.事件类型编码 <> 3 ) then 1 else 0 end),
-- 成批伤次数 = CASE when tt.实际救治人数>=3 then 1 else 0 end,
成批伤次数 = sum(CASE when tt.实际救治人数>=3 then 1 else 0 end),
-- 成批伤人数 = CASE when tt.实际救治人数>=3 then 救治人数 else 0 end,
成批伤人数 = sum(CASE when tt.实际救治人数>=3 then 救治人数 else 0 end),
-- 待派处理数 = CASE when TAC.挂起原因编码 is not null then 1 else 0 end,
待派处理数 = sum(CASE when TAC.挂起原因编码 is not null then 1 else 0 end),
-- 实际救治人数 = TT.实际救治人数
实际救治人数 = sum(TT.实际救治人数)
from ttask tt
inner join TAlarmevent tal on (TAl.事件编码 = tt.事件编码 )
inner join Tstation ts on (TT.分站编码=Ts.编码)
inner join Tambulance tam on (TT.车辆编码=Tam.车辆编码)
inner join Tacceptevent TAC on(TAC.事件编码 = TT.事件编码 and TAC.受理序号 = TT.受理序号)
WHERE (tt.出车结果编码 in (2,3,4,5) or tt.出车结果编码 is null)
and (TAl.事件性质编码=1) --去掉测试的数据
and (TAl.首次受理时刻 >= @BeginTime AND TAl.首次受理时刻< @EndTime)
and tt.中心编码 = @CenterId
--group by TAL.首次受理时刻
order by 时间段,病家退车,派救护车次数,转院,其它,成批伤次数,成批伤人数,待派处理数,实际救治人数
group by 时间段
SET NOCOUNT OFF
------------------------------------------------------------------------------------------
服务器: 消息 156,级别 15,状态 1,行 65
在关键字 'group' 附近有语法错误。
问题点数:20、回复次数:7Top
1 楼itblog(Just for wife!)回复于 2006-06-02 16:48:52 得分 0
错误太多了,这样的语句执行速度肯定会慢死~Top
2 楼Linux_9(($$$$))回复于 2006-06-02 16:58:38 得分 0
哈哈,那么楼上大师是否可以指点一下!!!十分感谢!!!Top
3 楼qq2cy(小齐)回复于 2006-06-02 17:09:21 得分 0
在group by 后面加上你所有在select 后出现的字段试试Top
4 楼itblog(Just for wife!)回复于 2006-06-02 17:11:51 得分 0
只要没有用聚合函数包含的字段,都需要加到group by 后面~Top
5 楼Linux_9(($$$$))回复于 2006-06-02 17:24:11 得分 0
group by 时间段,病家退车,抢救车,普通车,转院,其它,成批伤次数,成批伤人数,待派处理数,实际救治人数
order by 时间段,病家退车,抢救车,普通车,转院,其它,成批伤次数,成批伤人数,待派处理数,实际救治人数
是这个样子么??还是错误!!!
服务器: 消息 207,级别 16,状态 3,行 21
列名 '时间段' 无效。
这样的错误。
Top
6 楼Reeezak(坚持信念)回复于 2006-06-02 17:42:13 得分 0
去掉“时间段”
你的“时间段”根本就不是你的字段啊Top
7 楼itblog(Just for wife!)回复于 2006-06-02 17:47:25 得分 20
把时间段改成DatePart(Hour,TAL.首次受理时刻)
Top




