[英]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坐標。
我想要一個具有以下結構的表: x , y , ztop (該對中的較大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.