2012-06-04 2 views
1

У меня есть небольшая проблема с представлением postgreSQL, которое я должен создать для школьного проекта.Создайте представление, из которого выводится содержимое таблицы

У меня есть пять таблиц с именами:

  • вход (inputId, distributorId, дата)
  • Inputline (InputId, ObjectId, суммой)
  • Выход (outputId, ClientId, дата)
  • Outputline (outputId, ObjectId, сумма)
  • Stock (ObjectId, сумма)

Теперь мне нужен вид, который показывает мне изменения (за ObjectId), сделанные в хронологическом порядке, как это:

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

У меня нет абсолютно никакого понятия о том, как это сделать, так что я действительно ценю вашу помощь. Если требуется более подробная информация, не стесняйтесь спрашивать =)

ответ

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 BY после UNION или UNION ALL относится ко всему набору результатов.

Я заказываю по type дополнительно, чтобы разорвать связи с датой, чтобы входной сигнал поступал перед выходом.

0

Вид больше представляет собой комбинацию данных из других таблиц, а не новую информацию. Я рекомендую использовать новую таблицу для отображения изменений, а затем либо использовать triggers, либо если вы вставляете/обновляете/etc данные для своих таблиц через хранимые процедуры, а затем просто добавляете в таблицу изменений в процедуру. Триггеры помещаются в ваши таблицы. Например, триггер «на вставке» в вашей таблице выходной строки, который выполняет действие (вставка в этом случае) в другую таблицу (таблица изменений).

+0

Это было бы хорошо, если бы он отслеживал изменения в таблицах, но у ОП уже есть необходимые таблицы отчетов, чтобы собрать эту информацию. –

+0

Правда. Благодарю. Я пропустил это :) – Kyra

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" 
+0

Хмм, я думаю, что вы на правильном пути, но «дата» не является столбцом в outpuline и inputline, только на выходе и вводе –