请教union结果多出n条记录的问题

diyiziran 2012-02-21 02:25:52
语句的目的是:查询出所有明细之后,在最后一行加上汇总行。


sql语句大概是这样:
select * from
(
select a1,a2 from table1 (单独执行出来是58条记录)
union
select sum(a1),sum(a2) from table1 (单独执行出来是1调记录)
)as aaa (整条语句执行出来超过1000条记录)

请帮忙指点,是什么原因,要怎么写才对
...全文
196 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
music_mouse 2012-02-22
  • 打赏
  • 举报
回复
用With 来做
with tmpdata as (
select a1,a2 from table1 )
select * from tmpdata
union all
select sum(tmpdata.a1),sum(tmpdata.a2) from tmpdata
tracy敬 2012-02-21
  • 打赏
  • 举报
回复
正常情况下union all 下肯定是58+1 ,相信是楼主关联其它表了吧。
其实这种:最后一行是汇总行的,最好用oracle中的分析函数。
上面的union all,查询的是表 AGT_NONTRADABLE_CUST_STK_H 查询了两遍,虽然这个sql简单,不会有性能问题。


select sum(col1),sum(col2) from (
select TRADABLE_MKT_VAL as col1 ,NON_TRADABLE_MKT_VAL as col2
from FVIEW.AGT_NONTRADABLE_CUST_STK_H
where BUSI_DATE = cast('2012-02-01' as date)
) t
GROUP BY ROLLUP(col1)

这样也可以达到楼主想要的效果。
  • 打赏
  • 举报
回复
第一句执行还是58条,第二句执行还是1条 合并执行达到2000多条,怎么会呢???没关联其他表吧?


select TRADABLE_MKT_VAL as col1 ,NON_TRADABLE_MKT_VAL as col2
from FVIEW.AGT_NONTRADABLE_CUST_STK_H
where BUSI_DATE = cast('2012-02-01' as date)
union all
select sum(TRADABLE_MKT_VAL) ,sum(NON_TRADABLE_MKT_VAL)
from FVIEW.AGT_NONTRADABLE_CUST_STK_H
where BUSI_DATE = cast('2012-02-01' as date)
diyiziran 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hj_daxian 的回复:]
还有什么问题么 还是会多出来数据?
[/Quote]

出来2000多记录
  • 打赏
  • 举报
回复
还有什么问题么 还是会多出来数据?
diyiziran 2012-02-21
  • 打赏
  • 举报
回复
完整可以执行的语句:
select * from
(
select TRADABLE_MKT_VAL as col1 ,NON_TRADABLE_MKT_VAL as col2
from FVIEW.AGT_NONTRADABLE_CUST_STK_H
where BUSI_DATE = cast('2012-02-01' as date)

union all

select sum(TRADABLE_MKT_VAL) ,sum(NON_TRADABLE_MKT_VAL)
from FVIEW.AGT_NONTRADABLE_CUST_STK_H
where BUSI_DATE = cast('2012-02-01' as date)
)as aa
争取今天 2012-02-21
  • 打赏
  • 举报
回复
模式不可能.

把语句贴全
diyiziran 2012-02-21
  • 打赏
  • 举报
回复
为了贴出来就简化了很多,没有语法错误,运行是可以的,
主要是纠结于用了union(union all)后出来的结果多了很多记录
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mingchaoyan 的回复:]

你这样写能够正确执行?????
[/Quote]

这个 应该会报错吧

如果还要联合其他表的话 直接取个别名


select * from
(
select a1,a2 from table1
union all
select sum(a1),sum(a2) from table1
) a,table2 b
where ...
mingchaoyan 2012-02-21
  • 打赏
  • 举报
回复
select * from
(
select a1,a2 from table1 (单独执行出来是58条记录)
union
select sum(a1),sum(a2) from table1 (单独执行出来是1调记录)
)as aaa (整条语句执行出来超过1000条记录)

你这样写能够正确执行?????
我心飞翔 2012-02-21
  • 打赏
  • 举报
回复
应该执行:

select a1, a2 from table1
union all
select sum(a1), sum(a2) from table1
  • 打赏
  • 举报
回复
直接运行这个有多少数据

select a1,a2 from table1
union all
select sum(a1),sum(a2) from table1

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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