How to add ROW_NUMBER() in a view?

让人想犯罪 __ 提交于 2019-12-07 01:25:40

问题


In PostgreSQL 8.4 I want to create a view from 3 tables with id. So I want to have this structure in my view:

num serial,
name_dispatcher character varying(250)
the_geom geometry

I can select name_dispatcher and the_geom from tables:

 CREATE VIEW lineView
      AS SELECT 'name' AS name_dispatcher, the_geom
      FROM line1
      UNION
      SELECT 'name' AS name_dispatcher, the_geom
      FROM line2
      UNION
      SELECT 'name' AS name_dispatcher, the_geom
      FROM line3

How to create the num column in the view?

UPDATE

I found a solution:

ROW_NUMBER() OVER(ORDER BY lineView.voltage)

But I don't know how to use it in ALTER VIEW. How do I put it in there?


回答1:


You can't use ALTER VIEW to drop or add columns. I quote the manual on ALTER VIEW:

ALTER VIEW changes various auxiliary properties of a view. (If you want to modify the view's defining query, use CREATE OR REPLACE VIEW.)

But a simple CREATE OR REPLACE VIEW won't cut it. Another quote from the manual:

The new query must generate the same columns that were generated by the existing view query

So DROP and CREATE the view:

DROP VIEW lineview;

CREATE VIEW lineview AS
SELECT *, row_number() OVER(ORDER BY ???) AS num
FROM (
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line1

   UNION
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line2

   UNION
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line3
   ) x

I use a subquery because I assume you want to add row_number() to all rows. Your question is vague in that respect.
If you just want a unique id in no particular order, use row_number() OVER().



来源:https://stackoverflow.com/questions/14394002/how-to-add-row-number-in-a-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!