Group By&与SubQuery相比(Count大于1)

时间:2015-05-28 16:40:33

标签: sql teradata

我在这里努力尝试编写一个脚本,该脚本可以找到同一个伙伴(计数大于1)多次返回订单的位置。我用子查询猜测我的语法是不正确的。当我运行脚本时,我收到一条消息," SELECT失败.. [3669]子查询返回了多个值。"

我没有与子查询绑定,并且尝试仅使用group by和having语句,但是我收到有关非聚合值的错误。什么是最好的方式在这里进行,我该如何解决这个问题?

提前谢谢 - 代码如下:

SEL         s.saletran                                                          
            , s.saletran_dt SALE_DATE
            , r.saletran_id RET_TRAN
            , r.saletran_dt RET_DATE
            , ra.user_id RET_ASSOC
FROM        salestrans s

JOIN        salestrans_refund   r
            ON      r.orig_saletran_id = s.saletran_id
            AND r.orig_saletran_dt = s.saletran_dt
            AND r.orig_loc_id = s.loc_id
            AND r.saletran_dt between s.saletran_dt and s.saletran_dt + 30

JOIN        saletran rt     
            ON          rt.saletran_id = r.saletran_id
            AND     rt.saletran_dt = r.saletran_dt
            AND     rt.loc_id = r.loc_id

JOIN        assoc ra                    --Return Associate
            ON          ra.assoc_prty_id = rt.sls_assoc_prty_id

WHERE  
            (SELECT count(*)
            FROM            saletran_refund
            GROUP BY  ORIG_SLTRN_ID
            ) > 1

            AND     s.saletran_dt between '2015-01-01' and current_date - 1

2 个答案:

答案 0 :(得分:2)

根据您目前所做的事情,我认为您想要使用它:

where r.ORIG_SLTRN_ID in
(select 
ORIG_SLTRN_ID
from
saletran_refund
group by ORIG_SLTRN_ID
having count (*) > 1)

这将为您提供具有多行的ORIG_SLTRN_ID。

答案 1 :(得分:0)

你没有给出足够的答案,但这是一个开始

group by s.saletran                                                          
            , s.saletran_dt SALE_DATE
            , r.saletran_id RET_TRAN
            , r.saletran_dt RET_DATE
            , ra.user_id RET_ASSOC 
having count(distinct(ORIG_SLTRN_ID)) > 0

这确实更多地返回一行
跑吧

SELECT count(*)
FROM saletran_refund
GROUP BY  ORIG_SLTRN_ID