【发布时间】:2011-11-28 18:42:02
【问题描述】:
我有一个表,其中有一个名为 ID 的整数列,其中的值可能有间隙(例如 1、2、3、4、7、8、10、14、15、16、20)
我想找到一个查询,在上面的示例中,结果如下:
1-4 7-8 10 14-16 20
= 更新 =
感谢下面的代码(它似乎在 SQL Server 中运行良好),我觉得我非常接近让它在 MS-Access 中运行,这是目标。虽然在我的陈述中我仍然遇到语法错误,但我无法弄清楚......
选择值从 (
SELECT islands.PORTID, CSTR(islands.PORTID ) as val
FROM MYTABLE islands
WHERE NOT EXISTS (SELECT * FROM MYTABLE t2 WHERE t2.PORTID = islands.PORTID - 1)
AND NOT EXISTS (SELECT * FROM MYTABLE t2 WHERE t2.PORTID = islands.PORTID + 1)
UNION
SELECT
rngStart.PORTID
,CSTR(rngStart.PORTID ) + '-'
+ CSTR(MIN(rngEnd.PORTID)) as val
FROM MYTABLE rngStart
INNER JOIN MYTABLE checkNext ON checkNext.PORTID = rngStart.PORTID + 1
INNER JOIN
(
SELECT PORTID
FROM MYTABLE tblRangeEnd
WHERE NOT EXISTS (SELECT * FROM MYTABLE t2 WHERE t2.PORTID = tblRangeEnd.PORTID + 1)
) rngEnd on rngEnd.PORTID > rngStart.PORTID
WHERE NOT EXISTS (SELECT * FROM MYTABLE t2 WHERE t2.PORTID = rngStart.PORTID - 1)
GROUP BY rngStart.PORTID
) 作为 tbl 按 PORTID ASC 排序
【问题讨论】:
-
Sql 服务器? PostgreSQL?甲骨文?语法可能会有所不同,因此了解正确的语法会很有用。
-
最终我需要能够支持 SQL Server、Oracle 和 Access。不幸的是,MS-Access 是最重要的。
-
@user1069916:请参阅我的编辑以了解如何在 Access 中进行这项工作。
标签: sql ms-access range gaps-and-islands