Bạn có thể chia nhỏ các số thành các hàng riêng lẻ bằng UNPIVOT, sau đó sắp xếp lại thứ tự chúng dựa trên sự xuất hiện của tiền tố '07' bằng ROW_NUMBER () và cuối cùng kết hợp lại nó bằng PIVOT để kết thúc bằng 6 Tel
cột lại.
select *
FROM
(
select CustomerID, Col, Tel
FROM
(
select *, Col='Tel' + RIGHT(
row_number() over (partition by CustomerID
order by case
when Tel like '07%' then 1
else 2
end),10)
from phonenumbers
UNPIVOT (Tel for Seq in (Tel1,Tel2,Tel3,Tel4,Tel5,Tel6)) seqs
) U
) P
PIVOT (MAX(TEL) for Col IN (Tel1,Tel2,Tel3,Tel4,Tel5,Tel6)) V;