Select Rownum,
       Para_Year,
       Holiday_Name,
       Holiday_Type,
       To_Char(Holiday_Date, 'yyyy-mm-dd') Holiday_Date,
       Decode(Work_Day_Type, '+', '是', '-', '否') Work_Day_Type,
       Decode(Res, '', '暂无记录', Res) Res
  From Holiday_Work
 Where 1 = 1
 Group By Holiday_Name这样会提示不是一个group-by表达式.原因是我只为Holiday_Name分组了.而其他的没有.
如何才能正确的运行呢?我只想按照Holiday_Name分组.

解决方案 »

  1.   

    Select max(Rownum),    ----除了分组的字段外,其他都要用聚合函数来处理一下
           Para_Year,
           Holiday_Name,
           Holiday_Type,
           To_Char(Holiday_Date, 'yyyy-mm-dd') Holiday_Date,
           Decode(Work_Day_Type, '+', '是', '-', '否') Work_Day_Type,
           Decode(Res, '', '暂无记录', Res) Res
      From Holiday_Work
     Where 1 = 1
     Group By To_Char(Holiday_Date, 'yyyy-mm-dd')
      

  2.   

    没有sum,max之类的聚合函数你分组想做什么 是去重复还是做什么
      

  3.   


    --你是想求名字相同的中日期最近的一个?
    Select Rownum,
           Para_Year,
           Holiday_Name,
           Holiday_Type,
           To_Char(Holiday_Date, 'yyyy-mm-dd') Holiday_Date,
           Decode(Work_Day_Type, '+', '是', '-', '否') Work_Day_Type,
           Decode(Res, '', '暂无记录', Res) Res
      From Holiday_Work a
     Where 1 = 1 and not exists(select 1 from Holiday_Work b where a.Holiday_Name=b.Holiday_Name and a.Holiday_Date<b.Holiday_Date) 
      

  4.   

    最常见使用group by 是和组合函数一起使用的,你知道的,进行分组也是会影响sql执行效率的。不知道您想要的结果是不是和7楼兄弟理解的一样,如果是,下面的sql不错:--你是不是想求出名字相同的记录中日期最近的一个?
    Select Rownum,
           Para_Year,
           Holiday_Name,
           Holiday_Type,
           To_Char(Holiday_Date, 'yyyy-mm-dd') Holiday_Date,
           Decode(Work_Day_Type, '+', '是', '-', '否') Work_Day_Type,
           Decode(Res, '', '暂无记录', Res) Res
      From Holiday_Work a
     Where 1 = 1 and not exists(select 1 from Holiday_Work b where a.Holiday_Name=b.Holiday_Name and a.Holiday_Date<b.Holiday_Date) 
      

  5.   

    用order by Holiday_Name ???
    不太理解你想干什么??