我有以下查询,写在perl脚本中:
insert into #temp_table
select distinct bv.port,bv.sip,avg(bv.bv) bv, isnull(avg(bv.book_sum),0) book_sum,
avg(bv.book_tot) book_tot,
check_null = case when bv.book_sum = null then 0 else 1 end
from table_bv bv, table_group pge, table_master sm
where pge.a_p_g = '$val'
and pge.p_c = bv.port
and bv.r = '$r'
and bv.effective_date = '$date'
and sm.sip = bv.sip
查询继续 - 下面需要帮助(有人可以帮助我提高效率,或重写,我在想它的错误)
and ((sm.s_g = 'FE')OR(sm.s_g='CH')OR(sm.s_g='FX')
OR(sm.s_g='SH')OR(sm.s_g='FD')OR(sm.s_g='EY')
OR ((sm.s_t = 'TA' OR sm.s_t='ON')))
查询继续在
下面 group by bv.port,bv.sip
查询结束
解释:包含sip的一些$ val s_g('FE','CH','FX','SH','FD','EY')和 s_t('TA','ON')将book_sum设为null。 temp_table不带空值, 因此我将它们插入为零(isnull(avg(bv.book_sum),0)),只要它遇到以下s_g和s_m的空值。
我已尝试按如下方式进行查询,但它使我的脚本停止工作:
and sm.s_g in ('FE', 'CH','FX','SH','FD','EY')
or sm.s_t in ('TA','ON')`
答案 0 :(得分:2)
我知道这应该是评论,但我没有代表。对我来说,它看起来像是悬挂,因为你最后丢失了你的分组。我认为应该是:
and (
sm.s_g in ('FE', 'CH','FX','SH','FD','EY')
or
sm.s_t in ('TA','ON')
)
请注意括号。否则,你要求所有早期条件,或者sm.s_t是TA或ON之一,这是一个比你预期的更大的集合,这可能会导致它旋转。