我想獲取具有匹配電話號碼的記錄。共有 3 列保存電話號碼。作業、家庭和手機。我正在撰寫一個查詢來檢查電話號碼是否與 3 列中的任何一列匹配。
declare @phNo nvarchar(15) = 'xxxxxxxxxx'
select HomePhone, cellphone, workphone, *
from Contact_Table
where @phNo in (HomePhone, cellphone, workphone)
此查詢作業正常,但我還想要與電話號碼匹配的列的名稱。如何獲取匹配列的名稱?
例如,如果電話號碼與“homehpone”匹配,則結果集應回傳“homephone”
uj5u.com熱心網友回復:
這可以通過 CASE 來完成:
DECLARE @phNo NVARCHAR(15) = 'xxxxxxxxxx';
SELECT homephone,cellphone,workphone, *,
CASE WHEN @phNo = homephone THEN 'homephone'
WHEN @phNo = cellphone then 'cellphone'
WHEN @phNo = workphone THEN 'workphone'
END AS PhoneMatch
FROM Contact_Table
WHERE @phNo IN (HomePhone,cellphone,workphone);
uj5u.com熱心網友回復:
使用APPLY運算子也是一種選擇:
DECLARE @phNo nvarchar(15) = 'xxxxxxxxxx'
SELECT HomePhone, CellPhone, WorkPhone, a.PhoneType
FROM (VALUES
('xxxxxxxxxx', '000-000-000', '000-000-000'),
('000-000-000', '000-000-000', '000-000-000'),
('000-000-000', 'xxxxxxxxxx', '000-000-000')
) t (HomePhone, CellPhone, WorkPhone)
OUTER APPLY (VALUES
(t.HomePhone, 'HomePhone'),
(t.CellPhone, 'CellPhone'),
(t.WorkPhone, 'WorkPhone')
) a (Phone, PhoneType)
WHERE @phNo = a.Phone
結果:
| 家庭電話 | 手機 | 作業電話 | 電話型別 |
|---|---|---|---|
| xxxxxxxxx | 000-000-000 | 000-000-000 | 家庭電話 |
| 000-000-000 | xxxxxxxxx | 000-000-000 | 手機 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379306.html
標籤:sql sql-server 查询语句
上一篇:T-SQL查詢建議
