CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

group by 为什么出错?

楼主Linux_9(($$$$))2006-06-02 16:46:51 在 MS-SQL Server / 基础类 提问

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

相关问题

关键词

得分解答快速导航

  • 帖主:Linux_9
  • itblog

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo