我有以下查询
select count(trade_sid), shortcode
from trade
where
trade.trade_date <= sysdate and
trade.trade_date>= add_months(sysdate, -11)
group by shortcode
UNION ALL
select count(trade_sid), shortcode
from trade_archive
where
trade_archive.trade_date <= sysdate and
trade_archive.trade_date>= add_months(sysdate, -11)
group by shortcode
order by shortcode
这样就可以像这样重复输出
23 abc
24 abc
56 def
87 def
这是因为使用了union运算符,任何想法如何更改此查询以便我得到
47 abc
143 def
作为输出
我最终在java中执行此查询的用户没有足够的权限来创建临时表有没有其他方法可以解决这个问题?
答案 0 :(得分:3)
这样的事情:
select count(trade_sid), shortcode
from
(
select trade_sid, shortcode
from trade
where
trade.trade_date <= sysdate and
trade.trade_date>= add_months(sysdate, -11)
UNION ALL
select trade_sid, shortcode
from trade_archive
where
trade_archive.trade_date <= sysdate and
trade_archive.trade_date>= add_months(sysdate, -11)
) tt
group by shortcode
order by shortcode
答案 1 :(得分:0)
您必须按照短代码对值和分组进行求和,如下所示:
select sum(count(trade_sid)), shortcode
from trade
where
trade.trade_date <= sysdate and
trade.trade_date>= add_months(sysdate, -11)
group by shortcode
UNION ALL
select count(trade_sid), shortcode
from trade_archive
where
trade_archive.trade_date <= sysdate and
trade_archive.trade_date>= add_months(sysdate, -11)
group by shortcode
order by shortcode
答案 2 :(得分:0)
使用UNION
,而不是UNION ALL
。
union返回不同的记录。
唯一的问题是你的行不一样。