oracle中交叉表怎么样来查询?

badsky 2004-01-07 05:34:01
主表A :
value value_date type_id
----- ---------- --------
25 2003-12-12 1
30 2003-12-11 2
10 2003-12-01 3
60 2003-12-31 4

字典表B :
type_id type
------- ----
1 x
2 y
3 z
4 p


需要统计出的报表结构是:
x y z p
日期 星期 |----------------------------------------------------------
. . | . . . .
'2004-01-01' 星期四 |(value合计)
'2004-01-02' 星期五 | . . . .
'2004-01-03' 星期六 | . . . .
. . | . . . .


统计的是:起始日期到终止日期的一段时期内每天的各类的合计值

统计报表的结果,要是这段时期内每天都有一条记录,
如果这一天没有值的话,就应该是0

这样列是动态的交叉表怎么样查询?
...全文
204 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyq2000 2004-01-12
  • 打赏
  • 举报
回复
用动态sql
badsky 2004-01-08
  • 打赏
  • 举报
回复
查询出一段时期每一天的语句是:

select to_char(to_date('2000-01-01','yyyy-mm-dd')+(rownum-1),'yyyy-mm-dd') 日期 from user_objects where rownum<367 and to_date('2000-01-01','yyyy-mm-dd')+(rownum-1)<to_date('2001-01-01','yyyy-mm-dd');
yangguang1219 2004-01-08
  • 打赏
  • 举报
回复
学习关注
badsky 2004-01-08
  • 打赏
  • 举报
回复
up
beckhambobo 2004-01-07
  • 打赏
  • 举报
回复
交叉表是这种意思吗?
badsky 2004-01-07
  • 打赏
  • 举报
回复
而且,bzszp,请注意

统计报表的结果,要是这段时期内每天都有一条记录,
如果这一天没有值的话,就应该是0

你的查询语句只会列出发生过value的日期
badsky 2004-01-07
  • 打赏
  • 举报
回复
列是动态的,不确定的,所以 bzszp的方法不可行

sql server中现在都有transform专门用来做交叉表,
oracle中就没有吗?
bzszp 2004-01-07
  • 打赏
  • 举报
回复
如果type的个数固定的话,或者由数量范围的话可以做到
select value_date ,sum(decode(typeid,1,value,0)) 'X',sum(decode(typeid,2,value,0)) 'Y',
sum(decode(typeid,3,value,0)) 'Z',sum(decode(typeid,4,value,0)) 'P'
from a group by (value_date);

17,082

社区成员

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

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