【问题标题】:SQL Server 2008: ST Union based on IDSQL Server 2008:基于 ID 的 ST 联合
【发布时间】:2023-03-02 21:53:01
【问题描述】:

我有一个包含空间数据(地理类型)的表。我们称这个表为 A。该表的结构如下:

AreaID  RegionID    RegionName  SP_Geography
---------------------------------------------
   1       1        EAST        *Geogstring*
   2       1        EAST        *Geogstring*
   3       2        NORTH       *Geogstring*
   4       2        NORTH       *Geogstring*
   5       3        WEST        *Geogstring*

我想从这个表中更新另一个名为表 B 的表。这个表的结构如下:

RegionID    RegionNAme  SP_Geograph
-------------------------------------
1   EAST    *NULL*
2   NORTH   *NULL*
3   WEST    *NULL*

我想使用STUnion命令组合地理字符串,然后更新表B中RegionID与表A中RegionID匹配的空SP_Geography列。

我已经设法让 STUnion 命令在两个单独的行之间工作(它成功地结合了两者),但我不确定如何使用它来使用 where 子句或游标填充另一个表。

任何帮助将不胜感激!

丹尼

附:我知道 SQL Server 2012 中的 Union Aggregate 函数,但我不能使用它,因为我们的数据库必须在 2008 年运行

【问题讨论】:

    标签: sql sql-server-2008 union spatial


    【解决方案1】:

    你发现自己陷入了怎样的困境.....

    我希望这个小小的 SQL sn-p 可以解决问题。只要确保每次都更改 regionID。如果你想让它变得动态,只需将光标放在 regionID 周围,然后开始有趣的事情。

    DECLARE @MergedGeog Geography
    DECLARE @RegionID INt
    
    SET @RegionID = 1
    
    SELECT TOP(1) @MergedGeog=SP_GEOMETRY  FROM dbo.[SMA_Singapore_WGS84] WHERE RegionID = @RegionID
    
    --perform the merge
    SELECT @MergedGeog=@MergedGeog.STUnion(ISNULL(SP_GEOMETRY,@MergedGeog))
    FROM (SELECT SP_GEOMETRY FROM  [SMA_Singapore_WGS84] WHERE RegionID = @RegionID) k
    
    --return merged polygon
    
    select @MergedGeog
    

    【讨论】:

      【解决方案2】:
      UPDATE table B
      SET SP_Geograph = CONCAT(a.SP_Geography1, isnull(a.SP_Geography2,''))
      from
      (SELECT a.RegionID, a.RegionName, a.SP_Geography as SP_Geography1, b.SP_Geography as SP_Geography2 from table a as a
      left join table a as b on a.RegionID = b.RegionID and a.RegionName = b.RegionName) aa
      where [table b].RegionID = aa.RegionID
      

      这行得通吗?我没有测试过。

      UPDATE table B
      SET SP_Geograph = SP_Geography1.STUnion(isnull(SP_Geography2,''))
      from
      (SELECT a.RegionID, a.RegionName, a.SP_Geography as SP_Geography1, b.SP_Geography as SP_Geography2 from table a as a
      left join table a as b on a.RegionID = b.RegionID and a.RegionName = b.RegionName) aa
      where [table b].RegionID = aa.RegionID
      

      或者这个……

      【讨论】:

        猜你喜欢
        • 2015-02-03
        • 1970-01-01
        • 2016-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多