簡體   English   中英

C#/ SQLServer:通過相似的列值合並表中的行

[英]C# / SQLServer: Merge Rows in a table by similar column values

我在SQLServer中有一個表,其中有數百萬行包含x,y,z坐標:

X       Y       Z
2660000 1270000 421.8513
2660000 1270000 -1415.6297
2660000 1269960 421.0372
2660000 1269960 -1415.7926

總是恰好有兩行具有相同的x和y坐標。

我想要一個具有以下結構的表: xyztop (該對中的較大z值), zbase (較低z值)。 因此,對於每對具有相同x,y坐標的結果,僅包含一行。

我嘗試了不同的方法,但到目前為止沒有成功。 是否有人知道如何在C#中或直接在SQL Server中解決此問題?

在Oracle中,如下所示,沒有GROUP BY子句,聚合函數Max和MIN將應用於整個表,並將它們應用於x和y的每個唯一組合。

SELECT x, y, MAX(z), MIN(z) GROUP by x, y

您需要使用MIN和MAX集合函數來獲取頂部和底部z值,然后僅按x和y列進行分組。

IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'coords1' )
    BEGIN
        DROP TABLE dbo.coords1
    END
    GO

CREATE TABLE coords1 ( [x] DECIMAL(12,4),  [y] DECIMAL(12,4), [z] DECIMAL(12,4) )
GO

INSERT INTO coords1 ( x, y, z)
VALUES(2660000, 1270000, 421.8513),
(2660000, 1270000, -1415.6297), 
(2660000, 1269960, 421.0372),
(2660000, 1269960, -1415.7926)
GO

IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'coords2' )
BEGIN
    DROP TABLE dbo.coords2
END
GO

CREATE TABLE coords2 ( [x] DECIMAL(12,4), [y] DECIMAL(12,4), [ztop] DECIMAL(12,4), [zbase] DECIMAL(12,4) )
GO

INSERT INTO coords2 ([x], [y], [ztop], [zbase])
SELECT [x], [y], MAX([z]) AS [ztop], MIN([z]) AS [zbase]
FROM coords1
GROUP BY x, y

SELECT * FROM coords2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM