1

学校のプロジェクト用に作成する必要のあるpostgreSQLビューに少し問題があります。

次の名前のテーブルが5つあります。

  • Input(inputId、distributorId、date)
  • Inputline(InputId、ObjectId、ammount)
  • Output(outputId、clientId、date)
  • Outputline(outputId、ObjectId、ammount)
  • Stock(ObjectId、ammount)

ここで、次のように時系列で行われた変更(objectIdごと)を表示するビューが必要です。

| Date       | type   | ammount In | ammount out |
+------------+--------+------------+-------------+
| 10-10-2007 | Input  | 10         |             |
| 11-10-2007 | Output |            | 5           |
| 12-10-2007 | Input  | 20         |             |

私はこれを行う方法について全く手がかりがないので、私は本当にあなたの助けに感謝します。詳細が必要な場合は、遠慮なくお問い合わせください=)

4

3 に答える 3

0
SELECT o.date, 'Output' AS type, ol.amount AS amount_out, NULL AS amount_in
FROM   outputline ol
JOIN   output     o USING (outputid)

UNION ALL
SELECT i.date, 'Input', NULL, il.amount
FROM   inputline il
JOIN   input     i USING (inputid)
ORDER  BY date, type;

orの後のORDER BY句は、結果セット全体に適用されます。UNIONUNION ALL

type入力が出力の前に来るように、日付との関係を断ち切るために追加で注文します。

于 2012-06-04T16:24:09.353 に答える
0

ビューは、新しい情報ではなく、他のテーブルからのデータの組み合わせです。新しいテーブルを使用して変更を表示してから、トリガーを使用するか、ストアド プロシージャを使用してテーブルのデータを挿入/更新/etc している場合は、プロシージャを使用して変更テーブルに挿入を追加することをお勧めします。トリガーはテーブルに配置されます。たとえば、別のテーブル (テーブルの変更) でアクション (この場合は挿入) を実行する出力テーブルの「挿入時」トリガーです。

于 2012-06-04T15:37:57.323 に答える
0
select "date", type, "amount in", "amount out"
from (
    select 'output' as "type", "date", amount as "amount out", 0 as "amount in"
    from outputline
    union all
    select 'input' as "type", "date", 0 as "amount out", amount as "amount in"
    from inputline
) s
order by "date"
于 2012-06-04T15:49:42.660 に答える