创建一个显示来自哪个表内容的视图

时间:2012-06-04 15:31:41

标签: sql postgresql

我必须为学校项目创建一个postgreSQL视图。

我有五个名为:

的表
  • 输入(inputId,distributorId,date)
  • 输入线(InputId,ObjectId,ammount)
  • 输出(outputId,clientId,date)
  • 输出行(outputId,ObjectId,ammount)
  • 股票(ObjectId,ammount)

现在我需要一个视图,它向我展示按时间顺序排列的变化(每个objectId):

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

我完全不知道如何做到这一点,所以我非常感谢你的帮助。 如果需要更多细节,请不要犹豫=)

3 个答案:

答案 0 :(得分:0)

视图更多地是来自其他表的数据的组合,而不是新信息。我建议使用新表来显示更改,然后使用triggers或者如果您通过存储过程为表插入/更新/ etc数据,那么只需通过该过程将插入添加到更改表中。触发器放在您的表上例如,输出行表上的'on insert'触发器在另一个表(更改表)上执行操作(在本例中为插入)。

答案 1 :(得分: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"

答案 2 :(得分: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;

ORDER BYUNION后的UNION ALL子句适用于整个结果集。

我按type订购,以打破与日期的关系,以便在输出之前输入。