【发布时间】:2015-06-23 03:31:29
【问题描述】:
我正在努力解决“孤岛和差距”问题。这适用于 SQL Server 2008 / 2012(我们在两者上都有数据库)。
我有一张表格,用于跟踪 Pass Outlet 的“可用”序列号;即巴士通行证、门票、迪士尼乐园门票等。这些序列号是VARCHAR,可以是数字和字符的任意组合……任意长度,直到定义列的最大值。 . 这是VARCHAR(30)。这就是我在 VIEW 的语法/设计上苦苦挣扎的地方。
包含所有这些数据的表 (IM_SER) 的主键包括:
ITEM_NO...VARCHAR(20),
SERIAL_NO...VARCHAR(30)
在许多情况下……尤其是涉及不同类型的“公共汽车通行证”时,那些 Serial-# 很容易追踪到数以万计。所需要的......是 SQL Server 中的一个简单视图......它只是输出可用序列号的连续范围......直到找到 GAP(即序列中的中断)。例如,假设对于给定的 Item-#,我们手头有以下 Serial-#:
123
124
125
139
140
ABC123
ABC124
ABC126
XYZ240003
XYY240004
在我上面的示例中,输出将显示如下:
123 -to- 125
139 -to- 140
ABC123 -to- ABC124
ABC126 -to- ABC126
XYZ240003 to XYZ240004
总共会有 10 个 Serial-#...但由于我们输出的是顺序范围...只需要 5 行输出。这有意义吗?请让我知道......再一次,谢谢你!......马克
【问题讨论】:
-
序列号的不同格式将是一个问题。在您的示例中,您希望如何处理 ABC1244?
-
你能把你的号码分成两部分,字符串部分(空,ABC 或 XYZ)+然后是数字吗?这样您就可以分别处理字段并为数字进行所需的间隙和孤岛计算。
-
嗨 TheMadDBA。如果我们有一个记录,给定上面的例子,带有“ABCD1244”,那么我们必须有六行输出,因为你是对的,因为它不会落入顺序范围。嗨詹姆斯Z。我不知道如何做到这一点。这就是为什么我需要语法帮助 :-) 谢谢!...马克
-
好吧,如果没有语法,您能否定义和描述如何可靠地拆分字符串的逻辑,以便您可以严格按数字部分排序?在您的帖子中,您说它们可以是数字和字符的任意组合。 “A1A”和“A1B”会发生什么?
-
嗨 Tab Allerman...我明白你的意思。好的...所以微调我的逻辑...这些序列号将采用“######”(仅限数字)、“XXXXX”(仅限字母)、“# ##XXX”(数字后字母)或“XXX###”(字母后数字)。我们不会有 Alpha-Numeric-Alpha 的情况,我不好,抱歉。
标签: sql-server sql-server-2008