问题
Just to clarify up-front: I'm talking about unioning geometry, not the SQL keyword UNION.
I'm trying to move some spatial data from Postgres with PostGIS to SQL Server 2008. It was fine until I saw a statement like this:
SELECT GeomUnion(the_geom) FROM some_table
This unions all geometry in that column and return it as one result (similar to how COUNT works). As far I know, SQL Server only has the STUnion function, which unions one geometry with another. Is there any way to do something similar to the Postgres way?
If it helps, the STUnion function works like this:
SELECT first_geometry_column.STUnion(second_geometry_column) FROM some_table
回答1:
Is the UnionAggregate function SQL2012 only?
SELECT geography::UnionAggregate( geometry ) FROM some_table
Hmm guess so. http://technet.microsoft.com/en-us/library/ff929095.aspx
回答2:
The way I ended up doing this is with variables:
DECLARE @Shape GEOMETRY
SET @Shape = GEOMETRY::STGeomFromText('GEOMETRYCOLLECTION EMPTY', @MySrid)
SELECT @Shape = @Shape.STUnion(Shape)
FROM MyShapeTable
It's not as nice, but it works.
回答3:
Your best option is to create a CLR function to support the aggregate. There are a couple of existing solutions:
- Sql spatial tools
- Spatail aggregate
来源:https://stackoverflow.com/questions/3293190/union-all-geometry-in-a-sql-server-table-like-geomunion-in-postgres