有#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排序)?
答案 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>
祝你好运