我是 SQL 新手,感谢任何建议。
我正在尝试将条件 where 语句放入查询中,以将点生成过滤到第 2 列具有 01 的位置。
CREATE TABLE schema.table2 AS
SELECT "column1", "column2", dp.geom
FROM table1 WHERE column2 = "01", st_dumppoints(st_generatepoints(schema.geom, CAST(schema.column1 AS INT))) AS dp;
当我取出 'WHERE column2 = "01"' 时,查询工作正常
ST_GeneratePoints()
是一个标量函数,因此您可以将其直接插入集合返回 ST_DumpPoints()
,就在 select
列表中。 db<>fiddle 的演示:
CREATE TABLE schema.table2 AS
SELECT column1,
column2,
(st_dumppoints(st_generatepoints(geom, column1::int)) ).geom
FROM table1
WHERE column2 = '01';
select column1, column2, st_astext(geom) from schema.table2;
第1栏 | 第2栏 | st_astext |
---|---|---|
2 | 01 | 点(5.86390304259572 1.927184679457311) |
2 | 01 | 点(3.212729817760193 7.706451275408435) |
3 | 01 | 点(16.515447825106357 22.141316310508124) |
3 | 01 | 点(25.303230663190877 25.957851538628983) |
3 | 01 | 点(13.569699797511326 18.562723639342707) |
如果您想坚持当前布局,则需要将
WHERE
列表移动到 FROM
列表的后面。还建议非常小心使用
,
逗号。考虑明确使用
CROSS JOIN LATERAL
来代替,因为这就是您使用
,
逗号将被翻译为:
CREATE TABLE schema.table3 AS
SELECT column1, column2, dp.geom
FROM table1
CROSS JOIN LATERAL st_dumppoints(st_generatepoints(geom,column1::int)) AS dp
WHERE column2 = '01';