Postgresql 当表中的数据为空时,在自定义列中显示记录

Postgresql 当表中的数据为空时,在自定义列中显示记录,postgresql,Postgresql,我在PostgresSQL中有一个视图,如下图所示,如果视图不返回任何数据,我必须显示要填充的列“view\u lastmodifieddate”,并且每隔一列/行显示为空。同样,仅当表没有数据时 CREATE OR REPLACE VIEW test AS Select Column 1, Column 2, Column 3, '2020-08-19 12:01:14' AS view_lastmodifieddate From Table_1 你可以在这里使用工会: WITH cte

我在PostgresSQL中有一个视图,如下图所示,如果视图不返回任何数据,我必须显示要填充的列“view\u lastmodifieddate”,并且每隔一列/行显示为空。同样,仅当表没有数据时

CREATE OR REPLACE VIEW test AS 
Select Column 1,
Column 2,
Column 3,
'2020-08-19 12:01:14' AS view_lastmodifieddate
From Table_1

你可以在这里使用工会:

WITH cte AS (
    SELECT Col1, Col2, Col3, Col4, COUNT(*) FILTER (WHERE source = 1) OVER () AS cnt
    FROM
    (
        SELECT Col1, Col2, Col3, Col4, 1 AS source FROM Table_1
        UNION ALL
        SELECT NULL, NULL, NULL, '2020-08-19 12:01:14'::timestamp, 2
    ) t
)

SELECT Col1, Col2, Col3, Col4
FROM cte
WHERE (cnt > 0 AND source = 1) OR (cnt = 0 AND source = 2);

如果您确实希望将其作为视图,可以将上面提供的CTE内联到较低的select查询中,并将该select定义为视图。

我将使用左连接来完成此操作

CREATE OR REPLACE VIEW test AS 
select t.column1, t.column2, t.column3, 
       coalesce(t.view_lastmodifieddate, f.fixed_date) as view_lastmodifieddateb
  from (values ('2020-08-19 12:01:14'::timestamp)) as f(fixed_date)
       left join table_1 t
              on true;