使用范围子字符串连接两个表

时间:2013-11-03 13:56:14

标签: sql sql-server-2005 substring jointable

我有两张桌子需要加入。我试图将表(A)上的数字的前两位与另一个表(B)上列出的数字范围相匹配。结果将是表A的全部记录与表B的护理人员。

这些是表格:

表A:

CREATE TABLE [db].[Annual_Capture](
[id] [int] IDENTITY(1,1) NOT NULL,
[Main_TIN] [char](9),
[MainTaxpayerName] [varchar](20),
[Main_AbstractNumber] [char](3),
[Year] [int] NULL

表B:

CREATE TABLE [db].[CAREHOLDERS_TIN](
[Care_ID] [int] IDENTITY(1,1) NOT NULL,
[Care_EINStart] [char](2),
[Care_EINEnd] [char](2),
[Care_Owner] [varchar](20)

我不是SQL大师,所以尽管无休止地搜索,我仍然不知道正确的语法。 我试图使用以下但没有运气:

Select A.*, B.Care_Owner

FROM db.Annual_Capture as A,
inner join db.CAREHOLDERS_TIN as B
On A.Main_TIN = 
SUBSTRING(A.Main_TIN, 1, 2)>= B.Care_EINStart 
AND SUBSTRING(A.Main_TIN, 1, 2) <= B.Care_EINEnd 

注意:Main_TIN是char(9),Care_EINStart / Care_EINEnd是char(2)。因此,如果Main_TIN是867530900.我正在寻找分配了EINStart / Care_EINEnd的CareOwner,就像80/90。我必须为所有A.Main_TIN执行此操作,并将其与指定的B.Care_Owners一起加入。这可能最终会在存储过程中结束,或者更有可能是视图。

如果有人可以提供帮助,我们会感激不尽!

1 个答案:

答案 0 :(得分:0)

请尝试以下方法。我刚刚提供了正确的语法:

SELECT A.*, B.Care_Owner
FROM db.Annual_Capture AS A
    INNER JOIN db.CAREHOLDERS_TIN AS B
        ON SUBSTRING(A.Main_TIN, 1, 2) >= B.Care_EINStart 
            AND SUBSTRING(A.Main_TIN, 1, 2) <= B.Care_EINEnd