2015-07-06 41 views
1

我有一个SQL来确定呼叫何时进入。如果号码与地址簿号码中的一个相匹配,则会显示结果。逻辑类似如下:SQL查找与参数相匹配的列

select * from mstCustomerContact 
where CC_IsDelete<>1 
and (
Convert(varchar(100),RIGHT(CC_Ext1, 4)) = @Phone 
or Convert(varchar(100),RIGHT(CC_Ext2, 4)) = @Phone 
or Convert(varchar(100),CC_MobileNo) = @Phone 
or Convert(varchar(100),CC_ClinicNo) = @Phone 
or convert(varchar(100),CC_HomeNo) = @Phone 
or Convert(varchar(100),CC_Ext1) = @Phone 
or Convert(varchar(100),CC_Ext2) = @Phone 
or Convert(varchar(100),CC_Ext3) = @Phone 
or Convert(varchar(100),CC_Ext4) = @Phone 
or Convert(varchar(100),CC_Ext5) = @Phone) 

我可以得到记录,但我不知道Phone匹配到哪个列。 是否可以检索匹配的列?谢谢。

+1

根据SQL版本,你可以'unpivot'(转换的)值数据标准化的,包括其列名和做搜索在他们身上。 –

+0

而不是搜索每个单列,使用全文搜索来查找任何索引列中包含参数的记录 –

回答

1

重复他们在SELECT,您可以使用CASE

SELECT 
    cc_ext1_match = CASE WHEN CONVERT(VARCHAR(100), RIGHT(cc_ext1, 4)) = @Phone 
        THEN 1 ELSE 0 END, 
    cc_ext2_match = CASE WHEN CONVERT(VARCHAR(100), RIGHT(cc_ext2, 4)) = @Phone 
        THEN 1 ELSE 0 END, 
    cc_mobileno_match = CASE WHEN CONVERT(VARCHAR(100), RIGHT(cc_mobileno, 4)) = @Phone 
         THEN 1 ELSE 0 END, 
    .... 
    , cc.* 
FROM mstcustomercontact cc 
WHERE cc_isdelete <> 1 
     AND (CONVERT(VARCHAR(100), RIGHT(cc_ext1, 4)) = @Phone 
       OR CONVERT(VARCHAR(100), RIGHT(cc_ext2, 4)) = @Phone 
       OR CONVERT(VARCHAR(100), cc_mobileno) = @Phone 
       OR CONVERT(VARCHAR(100), cc_clinicno) = @Phone 
       OR CONVERT(VARCHAR(100), cc_homeno) = @Phone 
       OR CONVERT(VARCHAR(100), cc_ext1) = @Phone 
       OR CONVERT(VARCHAR(100), cc_ext2) = @Phone 
       OR CONVERT(VARCHAR(100), cc_ext3) = @Phone 
       OR CONVERT(VARCHAR(100), cc_ext4) = @Phone 
       OR CONVERT(VARCHAR(100), cc_ext5) = @Phone) 
+0

这是一个全文搜索更简单,更快速的情况 –

0

如果可能的重构你的数据库方案。

当前您正在将相似的内容存储在单独的列中。这会导致你的问题。

Table Person 
Id | Name | PhoneNumber1 | PhoneNumber2 | etc 
1 | Max | 01213  | 8172   | 

我会建议创建一个额外的“数字表”。

Table Person 
Id | Name 
1 | Max 

Table Number 
PersonId | Type   | Number 
1  | PhoneNumber1 | 01213 
1  | PhoneNumber2 | 8172 

这使得查询简单:

SELECT Id FROM Person 
INNER JOIN Number ON Id = PersonId 
WHERE Number = @input