0

2つのテーブルの和集合の集計を作成するクエリを作成していますが、和集合の2番目のテーブルにいくつかの列(合計)を含める必要があり、これを行う方法が正確にわかりません。これはストアドプロシージャの一部ではないため、変数はありません。詳細は以下のとおりです。

select t.col1, t.col2, t.col3 FROM (
    select d.col1, d.col2, d.col3 FROM table1 d
    join another_table
      on ...
    join different table
      on ...

    UNION ALL

    select a.col1, a.col2, a.col3 FROM table2 a
        join another_table
          on ...
        join different table
          on ...
    WHERE
       /*datetime restricitons */

) t

したがって、これが問題です。テーブルaとdのcol3は同じデータですが、テーブルbでは合計値であり、追加される新しい行はそれぞれ前の行に基づいて計算されます。(私はこれらのテーブルを制御できません)。

結合後、テーブルaの30ほどの余分な行が、テーブルdの行の最後に追加されます。唯一の問題は、テーブルaが累積値ではなく、行ごとの値であるということです。

理想的には、結合中に、テーブルdのcol3値の最後の行を取得し、テーブルaから追加された最初の行は、テーブルdのcol3の値+/-テーブルaのcol3の値になります。

私はこれを適切に説明したことを願っています、私はこれを行う方法があることを知っています、私はそれをどのように適用するかがわかりません。

次に、2つの物理テーブルの例と、出力集計がどのように表示されるか、およびどのように表示されるかを示します。

表d: 組合の最初のテーブル

表a:

ユニオンの2番目のテーブル

出力テーブル:REDISH行はテーブルdからのものであり、BLUEはテーブルaからのものです。

出力の終了(集計)

4

1 に答える 1

0

OK、青いものが正しいとしても、あなたが与えた結果の例の使用法を思いつかないので、実際にどのような出力が必要なのか少し興味があります。青いものを修正し、赤いものも含めたいかどうかを決定してください。

col3 が col3 ではないことを除いて、テーブル A の列を識別する必要がありますが、実際には、列 TYPE であると仮定するテーブル D のデータの種類を識別する列の現在の合計は col3 です。この累計には前のデータを組み込む必要がありますが、後続のデータは組み込む必要がないため、何らかの日時列またはシーケンス列も必要になるため、この列を DATE と呼びます。

select alias_a.ID, alias_a.TYPE, alias_a.DATE, sum(b.VALUE) as Accum
from a alias_a join (
    select TYPE, col3 as VALUE from a where DATE <= alias_a.DATE
    ) b ON alias_a.TYPE = b.TYPE

これで、このデータをテーブル D と結合してデータを取得できます。

select d.TYPE, ..., x.ID, x.DATE, (d.col3 + x.Accum) as RUNNING_TOTAL
from d join (
    select alias_a.ID, alias_a.TYPE, alias_a.DATE, sum(b.VALUE) as Accum
    from a alias_a join (
        select TYPE, col3 as VALUE from a where DATE <= alias_a.DATE
        ) b ON alias_a.TYPE = b.TYPE
) x on d.TYPE = x.TYPE 
order by d.TYPE, x.DATE 

これは役に立ちますか?

于 2012-08-15T00:01:08.837 に答える