Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何替换冲突类型联合中的值_Sql_Postgresql_Postgis - Fatal编程技术网

SQL:如何替换冲突类型联合中的值

SQL:如何替换冲突类型联合中的值,sql,postgresql,postgis,Sql,Postgresql,Postgis,我在Postgres和PostGIS中有一个表,其中有几千行,每行都有nametext、codetext、citytext和一个统计区域单位(如县)的几何图形。这些几何图形镶嵌得非常完美 我正在尝试编写一个查询,该查询将选择满足某些条件的所有行,并将其余行聚合到一行中。对于这一行,我对名称和代码不感兴趣,只对聚合的geom感兴趣。例如,类似这样的事情: code | name | geom ------+--------------------+---------

我在Postgres和PostGIS中有一个表,其中有几千行,每行都有nametext、codetext、citytext和一个统计区域单位(如县)的几何图形。这些几何图形镶嵌得非常完美

我正在尝试编写一个查询,该查询将选择满足某些条件的所有行,并将其余行聚合到一行中。对于这一行,我对名称和代码不感兴趣,只对聚合的geom感兴趣。例如,类似这样的事情:

 code | name               |  geom
------+--------------------+---------
 102  | Central Coast      | geo...
 115  | Sydney - Baulkham  | geo...
 116  | Sydney - Blacktown | geo...
 117  | Sydney - City      | geo...
 118  | Sydney - Eastern   | geo...
 000  | Remaining Counties | geo... <---Second SELECT just to get this row
我曾经想到过以下几点:

SELECT code, name, ST_Force2D(geom) FROM mytable WHERE mytable.city = 'Greater Sydney' UNION 
SELECT 
  CASE WHEN count(code) > 0 THEN '0' ELSE 'x' END AS code, 
  CASE WHEN count(name) > 0 THEN 'Rest of Sydney' ELSE 'x' END AS name, 
  ST_Collect(geom) 
FROM mytable WHERE mytable.city <> 'Greater Sydney';

这似乎是一个非常迂回和不明确的方式来完成一些相当简单的事情。有更好的方法吗?

您可以硬编码希望这些单元格填充的内容。我相信在博士后,你可以用蜱来做这件事:

SELECT code, name, ST_Force2D(geom) 
FROM mytable 
WHERE mytable.city = 'Greater Sydney'

UNION 

SELECT '0', 'Remaining Countries', ST_Collect(geom) 
FROM mytable 
WHERE mytable.city <> 'Greater Sydney';

您找到的答案补偿了零值,并用X替换它们。如果您希望在这种情况下看到Xs,您可以这样做。对我来说似乎没有必要。

我不知道这是否适用于PostGreSQL,因为我已经多年没有使用过它,也从未使用过PostGIS,但您可以尝试:

SELECT
    CASE WHEN city = 'Greater Sydney' THEN code ELSE '000' END AS code,
    CASE WHEN city = 'Greater Sydney' THEN name ELSE 'Remaining Counties' END AS name,
    ST_Collect(geom) AS geom
FROM
    MyTable
GROUP BY
    CASE WHEN city = 'Greater Sydney' THEN code ELSE '000' END,
    CASE WHEN city = 'Greater Sydney' THEN name ELSE 'Remaining Counties' END
由于ST_Collect是一个聚合函数,如果它在一行上聚合,那么它应该只返回该行的几何图形。如果有必要的话,你可以把它放在ST_Force2d里,但我不确定它是不是