SQL查找与参数匹配的列

时间:2015-07-06 07:30:22

标签: sql-server

我有一个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)

我可以获得记录,但我不知道电话匹配到哪一列。 是否可以检索它匹配的列?感谢。

2 个答案:

答案 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 ) 

答案 1 :(得分: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