Oracle查询中的代码重复

时间:2015-10-12 10:59:23

标签: oracle

有#34;代码重复"在sqls中,例如:

select to_char(date_col, 'ddmmyyyy'), types_col, max(some_value) 
from a_table 
group by to_char(date_col, 'ddmmyyyy'), types_col
order by to_char(date_col, 'ddmmyyyy'), types_col;

在这个简单的sql中我需要复制" to_char(date_col,' ddmmyyyy'),types_col"好几次 有没有办法避免重复(我不是说使用"按1,2和#34排序)?

2 个答案:

答案 0 :(得分:2)

在12c中你可以声明"本地" function.。在以前的Oracle版本中,您必须使用嵌套查询和列别名。我不知道其他任何方式。

更新

with a1 as
(
 select to_char(date_col, 'ddmmyyyy') as date_str, a.*
 from a_table a
)
select date_str, types_col, max(some_value) 
from a1 
group date_str, types_col
order by date_str, types_col;

在11g中没有别的办法。

答案 1 :(得分:0)

也许您可以针对您的问题尝试此代码块:

select k.date_col,k.types_col,max(k.some_value)
from (select to_char(a.date_col,'dd.mm.yyyy') as date_col, a.types_col, a.some_value from a_table a) k
group by k.date_col, types_col
order by k.date_col, k.types_col

对于这些数据:

<!DOCTYPE html>
<html>
<body>

<table style="width:100%">
  <tr>
    <td>date_col</td>
    <td>types_col</td>		
    <td>some_value</td>
  </tr>
  <tr>
    <td>12.10.2015</td>
    <td>A</td>		
    <td>5</td>
  </tr>
  <tr>
    <td>12.10.2015</td>
    <td>B</td>		
    <td>3</td>
  </tr>
    <tr>
    <td>12.10.2015</td>
    <td>A</td>		
    <td>52</td>
  </tr>
</table>

</body>
</html>

它给出了这个结果:

<!DOCTYPE html>
<html>
<body>

<table style="width:100%">
  <tr>
    <td>date_col</td>
    <td>types_col</td>		
    <td>some_value</td>
  </tr>
  <tr>
    <td>12.10.2015</td>
    <td>A</td>		
    <td>52</td>
  </tr>
  <tr>
    <td>12.10.2015</td>
    <td>B</td>		
    <td>3</td>
  </tr>
</table>

</body>
</html>

祝你好运