我有一个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)
我可以获得记录,但我不知道电话匹配到哪一列。 是否可以检索它匹配的列?感谢。
答案 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