假設我有一些客戶有多個電話號碼,而有些客戶只有一個號碼。每當有多個數字時,總會在其中一個數字旁邊設定一個等于“MAIN”的型別列。但是如果沒有多個數字,那么 Type 可以等于任何東西。在 T-SQL 中,在有多個數字的情況下如何選擇標記為“主要”的數字,但在沒有多個數字的情況下只需選擇唯一可用的數字。謝謝!
在連接上使用子查詢將是理想的.. 但我似乎無法理解。
客戶表: | 身份證 | 姓名 |
| --- | ----- | | 身份證 | ACME 公司 | | 1 | 福吧 |
電話表:
| 客戶編號 | 型別 | 電話 |
|---|---|---|
| 1 | 廢話 | 12345 |
| 2 | 空值 | 33333 |
| 2 | 主要的 | 98765 |
期望輸出:
1,12345
2,98765
uj5u.com熱心網友回復:
兩次加入電話表 - 首先是MAIN電話,然后是任何電話,并用于coalesce()獲得第一個(即非空)命中:
select
c.id,
max(coalesce(p.phone, p2.phone)) as phone_number
from customer c
left join phone_table p on p.cust_id = c.id
and p.type = 'MAIN'
left join phone_table p2 on p2.cust_id = c.id
group by c.id
max()用于僅在有許多非主要電話號碼的情況下回傳一行。如果你想要它們,洗掉max和group by
請注意,條件p.type = 'MAIN' 必須在連接條件中(不在where子句中)才能起作用。
如果你把條件的where條款,這將迫使加盟p是一個內在的加入,客戶沒有MAIN手機將不予退還。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/383806.html
上一篇:在許多分隔符之后拆分串列元素
下一篇:零連接與空安全連接中的空值
