sql union返回重复的结果

时间:2011-06-08 03:34:59

标签: sql union

我有以下查询

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中执行此查询的用户没有足够的权限来创建临时表有没有其他方法可以解决这个问题?

3 个答案:

答案 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返回不同的记录。

唯一的问题是你的行不一样。