【发布时间】:2023-03-29 13:30:01
【问题描述】:
我的 SQL 代码正在执行以下操作:它获取所有“文本”,其中 (O_Top - 前 O_Top)
表格中的数据:
Text O_Top O_Left
------------------------------
D 536 654
5 401 544
1 392 581
2 395 609
K 418 666
1 329 142
K 421 711
H 424 753
9 228 1194
5 205 666
SQL 代码:
;WITH cte AS
(
SELECT
[Text], [O_Top], [O_Left],
ID = ROW_NUMBER() OVER (ORDER BY [O_Left])
FROM
MyTableName
)
SELECT *
FROM cte AS c1
LEFT JOIN CTE c2 ON c1.ID = C2.ID - 1
WHERE ABS(c1.O_Top - c2.O_Top) < 30
AND ABS(C1.O_Left - c2.O_Left) < 110
ORDER BY C1.[O_Left]
我得到的结果:
Text O_Top O_Left ID Text O_Top O_Left ID
-----------------------------------------------------------
5 401 544 2 1 392 581 3
1 392 581 3 2 395 609 4
K 418 666 7 K 421 711 8
K 421 711 8 H 424 753 9
我正在寻找像UNION 这样的结果如下:
Text O_Top O_Left ID
---------------------------
5 401 544 2
1 392 581 3
K 418 666 7
K 421 711 8
1 392 581 3
2 395 609 4
K 421 711 8
H 424 753 9
我正在寻找一种方法来避免列的重复,如果我可以在同一个 SQL 命令中使用类似 distinct 的东西,那就太棒了,这样会向我显示独特的结果,因为现在重复 ID 像 8 和 3
我想了很多,但我觉得这个命令太复杂了,我的大脑无法处理它
非常感谢您的帮助和支持!
【问题讨论】:
-
旁注:您的样本值与结果表中的值不匹配。
-
是的,你是对的。对不起,我现在试着编辑一下
标签: sql sql-server-2008 join union