0

クエリで異なる期間の異なる合計を組み合わせたい

次のクエリを使用して合計を取得します。

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

これは意図したとおりに機能します。

2 番目の合計にアップグレードする場合

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 つの重複する列で誤検知が発生します。クエリは、2 番目の合計に同じ日付を使用します。2 番目の Sum を Max 関数に変更すると、2 番目の日付が使用されます

これら 2 つの関数の結果を組み合わせる方法。

PS: Interbase は使用できません

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

1 に答える 1

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
于 2013-02-28T13:20:18.280 に答える