SOS~ 关于Oracle 数据集 列转行的问题

Code_Mokey 2014-12-17 11:17:44
从一张表中查询出的数据集格式为:


金额

第一周

第二周

第三周

现需求要求 插入另一张表中,表格式为:

月份 第一周金额 第二周金额 第三周金额


没有多少论坛分了。。 求救 多谢 多谢。。
...全文
134 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Code_Mokey 2014-12-18
  • 打赏
  • 举报
回复
引用 8 楼 bw555 的回复:
如果使用to_char(D,'IW')的时候需要特别注意,每年的第一个月和最后一个月需要特殊处理一下 如果一年当中第52周别之后至当年的12月31日之间,还有大于或等于4天的话,则定为当年的第53周,否则剩余这些天数被归为下一年的第1周;如果在不 足52周别的话,则以下一年的时间来补;每周固定的从周一开始作为本周的第1天,到周日作为本周的第7天;比如:在Oracle中 2006/01/01 依然属于IW周别 05年的第52周的第7天 特殊处理方式如下:
to_char(D,'IW')
--替换为
TO_CHAR(
DECODE(TO_CHAR(D,'IW'),'52',next_day(D-7,2),'53',next_day(D-7,2),D)
,'YYYYIW')
谢谢BZ 这么尽心尽力 万分感谢
bw555 2014-12-17
  • 打赏
  • 举报
回复
如果使用to_char(D,'IW')的时候需要特别注意,每年的第一个月和最后一个月需要特殊处理一下

如果一年当中第52周别之后至当年的12月31日之间,还有大于或等于4天的话,则定为当年的第53周,否则剩余这些天数被归为下一年的第1周;如果在不 足52周别的话,则以下一年的时间来补;每周固定的从周一开始作为本周的第1天,到周日作为本周的第7天;比如:在Oracle中 2006/01/01 依然属于IW周别 05年的第52周的第7天

特殊处理方式如下:
to_char(D,'IW')
--替换为
TO_CHAR(
DECODE(TO_CHAR(D,'IW'),'52',next_day(D-7,2),'53',next_day(D-7,2),D)
,'YYYYIW')
bw555 2014-12-17
  • 打赏
  • 举报
回复
周次还可以使用to_char(日期,'IW')获得周次,这样获取的周次是从年初到当前是第几周
然后利用row_number()获取周次是当前月的第几周
这样划分的周是从周一开始的
with T AS (
select to_char(D,'yyyy-mm') 月度,
ROW_NUMBER()OVER(PARTITION BY to_char(D,'yyyy-mm') ORDER BY to_char(D,'IW')) 周次,
sum(金额) 金额
FROM table1
group by to_char(D,'yyyy-mm'),to_char(D,'IW')
)
select 月度,
SUM(DECODE(周次,1,金额)) 第一周金额,
SUM(DECODE(周次,2,金额)) 第二周金额,
……
from T
group by 月度
bw555 2014-12-17
  • 打赏
  • 举报
回复
按你目前给出的,周六周日我不知道你准备如何处理,目前按照一周从周日到周六的方式给你写代码吧 假设你的原始表日期字段为D
with T AS (
select to_char(D,'yyyy-mm') 月度,ceil((to_char(D,'dd')-to_char(D,'d')+to_char(trunc(D,'month'),'d'))/7) 周次,sum(金额) 金额
FROM table1
group by to_char(D,'yyyy-mm'),ceil((to_char(D,'dd')-to_char(D,'d')+to_char(trunc(D,'month'),'d'))/7)
)
select 月度,
SUM(DECODE(周次,1,金额)) 第一周金额,
SUM(DECODE(周次,2,金额)) 第二周金额,
……
from T
group by 月度
Code_Mokey 2014-12-17
  • 打赏
  • 举报
回复
引用 3 楼 bw555 的回复:
你的周是怎么定义的? 举例说吧,今年的10月1号是周三,那第一周指得是那几天? 哪周算在哪个月是按周起始日期算的,还是截止日期算的?
那天算做10月的第一周 第一周 从 10月1日 到 10月3日 最后一周 假如 10月的最后一天是星期4 那么 从周1 到周4算是最后一周
Phoenix546 2014-12-17
  • 打赏
  • 举报
回复
源数据表 还有 两列 分别是 周开始日期 周结束日期 源表数据格式 为 : 数据日期 金额 看你的描述,源数据表究竟有哪几列啊?
bw555 2014-12-17
  • 打赏
  • 举报
回复
你的周是怎么定义的? 举例说吧,今年的10月1号是周三,那第一周指得是那几天? 哪周算在哪个月是按周起始日期算的,还是截止日期算的?
Code_Mokey 2014-12-17
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
表里只有金额这一列?我怎么能区分哪个是第一周,哪个是第二周?
源数据表 还有 两列 分别是 周开始日期 周结束日期 其实这个是我按周汇总出来的 。 源表数据格式 为 : 数据日期 金额
bw555 2014-12-17
  • 打赏
  • 举报
回复
表里只有金额这一列?我怎么能区分哪个是第一周,哪个是第二周?

17,081

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧