通过子串范围加入?

时间:2015-10-19 15:37:57

标签: sql database ms-access

我有一个MS Access 2003数据库表,其中包含大型业主拥有的租赁物业列表。它有一个字段'PARISH',它总是一个4位数的字符串。前两个字符是表示给定属性的房东(所有者)的唯一代码。例如。 'Silverline Properties'的'SP',''Badhest Lettings'的BL'。后两个字符代表属性的位置代码 - 例如HU为Humbervale,EK为Eastkirk等。

使用此4位数代码将每个属性分配给某个处理团队。有十个团队。

一个房东可以在多个地方拥有房产。无论地点如何,有些团队都会处理所有房东的房产。其他团队根据地点处理房东的一部分房产。

有一个查找表(dbo_Mail_Routing)来识别哪个团队处理一个属性。它通过低范围和高范围字段来实现,例如: -

LOW_RANGE, HIGH_RANGE, TEAM
SPAA, SPZZ, Team1
BLAA, BLZZ, Team2 

ADAA, ADAZ, Team7
ADBA, ADBD, Team8
ADBE, ADMR, Team9
ADMS, ADMT, Team10

LCAA, LCAD, Team10
LCAF, LCAz, Team2
LCBA, LCFz, Team7 
LCGA, LCzz  Team5

将'PARISH'字段与上面查找表中的代码范围进行比较,以查看哪个团队处理该属性。 PARISH字段必须符合低值和高值之间的代码“范围”。这里有各种各样的场景: -

  1. 给定LL的查找表中的一行,AA到ZZ的位置 - 足够简单。所有属性,无论PARISH中的第三个和第四个字符,都与该团队相匹配

  2. 一个LL的多行,但其中low_range和high_range是相同的值 - 再次简单,只需将PARISH字段映射到LOW_RANGE字段,它们是相等的

  3. 一个LL有多行,但位置代码范围不同。

  4. 如何从4位数的PARISH字段正确地获取相关团队?

    到目前为止,我可以将上面的方案1和2作为

    处理
    SELECT a.*, b.TEAM
    FROM tblPROPS a
    INNER JOIN dbo_Mail_Routing b ON b.LOW_RANGE = a.PARISH
    WHERE b.LOW_RANGE = b.HIGH_RANGE
    
    UNION ALL
    
    SELECT a.*, b.TEAM
    FROM tblPROPS a
    INNER JOIN dbo_Mail_Routing b ON LEFT(a.PARISH, 2) = LEFT(b.LOW_RANGE, 2)
    WHERE b.LOW_RANGE <> b.HIGH_RANGE
    AND RIGHT(b.LOW_RANGE, 2) = "AA"
    AND RIGHT(b.HIGH_RANGE, 2) = "ZZ"
    

    有没有办法在访问中查询两位数的字符串是否在'范围'内?

0 个答案:

没有答案