2013-02-28 37 views
0

我想结合查询中不同时期的不同总和结合不同的集合函数与CASE

我使用下面的查询来获得总和。

SELECT table1.BRS, 
Sum(CASE WHEN table2.DATUM BETWEEN :van1 AND :tot1 THEN (DBBASIS-CRBASIS) ELSE (0) END)  
FROM table1 INNER JOIN table2 ON (table1.id= table2.id)  
WHERE table2.DATUM BETWEEN :van1 AND :tot1 
group by BRS 

而且这个工作原理是一样的。

如果我升级到了第二和

SELECT table1.BRS, 
Sum(CASE WHEN table2.DATUM BETWEEN :van1 AND :tot1 THEN (DBBASIS-CRBASIS) ELSE (0) END), 
Sum(CASE WHEN table2.DATUM BETWEEN :van2 AND :tot2 THEN (DBBASIS-CRBASIS) ELSE (0) END)  
FROM table1 INNER JOIN table2 ON (table1.id= table2.id)  
WHERE table2.DATUM BETWEEN :van1 AND :tot1 or table2.DATUM BETWEEN :van2 AND :tot2 
group by BRS 

我得到一个误报2重复列,即使数据是不同的。 查询对第二个和使用相同的日期。 当我将第二个总和更改为最大功能时,它使用第二个日期

如何组合这两个功能的结果。

PS:Interbase的不能使用

Select * from (Select Sum from...) Join (Select Sum from...) 

回答

2

如果我理解正确的数据模型,然后:

SELECT table1.BRS, 
     Sum(t2a.DBBASIS-CRBASIS), 
     Sum(t2b.DBBASIS-CRBASIS) 
FROM table1 LEFT JOIN table2 t2a ON (table1.id= t2a.id and t2a.DATUM BETWEEN :van1 AND :tot1) 
     LEFT JOIN table2 t2b ON (table1.id = t2b.id and t2b.DATUM BETWEEN :van2 AND :tot2) 
group by BRS 

编辑:

SELECT t1a.BRS, 
     Sum(t1a.DBBASIS-CRBASIS), 
     Sum(t1b.DBBASIS-CRBASIS) 
FROM table2 left join table1 t1a ON (table2.id= t1a.id and table2.DATUM BETWEEN :van1 AND :tot1) 
     LEFT JOIN table1 t1b ON (table2.id = t1b.id and table2.DATUM BETWEEN :van2 AND :tot2) 
group by t1a.BRS 
+0

数据(DBBASIS&CRBASIS)是在table1中。 thnx为你答案,我觉得我接近,但还没有那里 – 2013-02-28 13:38:52

+0

thnx为编辑,我真的很接近,但我得到只有几个结果行,而我需要更多,感觉就像它有一些与联接? – 2013-02-28 13:52:41

+0

没关系,我得到一个空的结果表,因为如果我的日期不重叠,并且它给出了通过两个周期的记录的结果 – 2013-02-28 13:55:38