2014-03-24 50 views
-5
select ac1.ACCT_CODE, 
     ac1.PERIOD, 
     ac1.MONTH, 
     ac1.YEAR, 
     ac1.PRD_BDGT, 
     ac2.ACCT_CODE, 
     ac2.PERIOD, 
     ac2.MONTH, 
     ac2.YEAR, 
     ac2.PRD_BDGT 
from account ac1, account ac2 
where ac1.acct_code='075200' 
    and ac1.year=1994 
    and ac1.period between 1 and 6 
    and ac2.acct_code=ac1.acct_code 
    and ac2.year=1995 
    and ac2.period =ac1.period 

union 

select ac3.ACCT_CODE, 
     ac3.PERIOD, 
     ac3.MONTH, 
     ac3.YEAR, 
     ac3.PRD_BDGT, 
     ac4.ACCT_CODE, 
     ac4.PERIOD, 
     ac4.MONTH, 
     ac4.YEAR, 
     ac4.PRD_BDGT 
from account ac3, account ac4 
where ac3.acct_code='075200' 
    and ac3.year=1995 
    and ac3.period between 7 and 12 
    and ac4.acct_code=ac3.acct_code 
    and ac4.year=1996 
    and ac4.period=ac3.period 
+0

做一个sqlfiddle – Tschallacka

+1

如果这个查询实际上做你想要的,我会感到惊讶。你可以看到,这个问题还没有得到很好的回答。我建议你问另一个问题,包括样本数据和期望的输出,并解释你实际试图解决的问题。 –

回答

2

使用一个OR

select ac1.ACCT_CODE, 
ac1.PERIOD, 
ac1.MONTH, 
ac1.YEAR, 
ac1.PRD_BDGT, 
ac2.ACCT_CODE, 
ac2.PERIOD, 
ac2.MONTH, 
ac2.YEAR, 
ac2.PRD_BDGT 
from account ac1, account ac2 
where ac1.acct_code='075200' 
    and ac2.acct_code=ac1.acct_code 
    and ac2.period =ac1.period 
and ((ac1.year=1994 
    and ac1.period between 1 and 6 
    and ac2.year=1995 
) OR 
    (ac1.year=1995 
    and ac1.period between 7 and 12 
    and ac2.year=1996)) 
2

您的查询,走的是两个非常相似的查询,其中唯一的区别是在一定条件下的unionwhere条款。您可以通过在where子句中使用or来很容易地将它们组合在一起。

下面的查询还修复了join语法:

select ac1.ACCT_CODE, ac1.PERIOD, ac1.MONTH, ac1.YEAR, ac1.PRD_BDGT, ac2.ACCT_CODE, 
     ac2.PERIOD, ac2.MONTH, ac2.YEAR, ac2.PRD_BDGT 
from account ac1 join 
    account ac2 
    on ac2.period = ac1.period and 
     ac2.acct_code = ac1.acct_code 
where ac1.acct_code='075200' and 
     ((ac1.year = 1994 and 
     ac1.period between 1 and 6 
     ac2.year=1995 
     ) or 
     (ac1.year=1995 and 
     ac1.period between 7 and 12 and 
     ac2.year=1996 
     ) 
    ); 

我会感到惊讶,如果这实际上查询解决您的业务问题。对accounts表进行自联接是可疑的。通常,聚合是需要的,但我无法说出查询的目的。

+0

加入+1,我完全没有注意到它。 –