SQL:为每个填充列选择多行

use*_*554 1 sql database sql-server join

我有一张桌子:

  • 是PersonID
  • 名称
  • 电话1
  • 电话2
  • FAX1
  • FAX2

我有这样的记录:

SELECT * FROM Person

1   Test    0123                NULL    0123
2   Test2   NULL    567         789     NULL
3   Test3   0123    NULL        NULL    0123
4   Test4   0123    5555        NULL    
Run Code Online (Sandbox Code Playgroud)

(结果有NULL但也有EMPTY字符串)

我想要选择所有有效数字(每个可用数字的多个记录):

1   Test    0123
1   Test    0123
2   Test    567 
2   Test    789
Run Code Online (Sandbox Code Playgroud)

这可能吗?我选择每个可用值的所有列,并将值存储在最后一列?

Gor*_*off 5

一种简单的方法用于apply:

select p.personid, p.name, v.contact_number
from person p cross apply
     (values (phone1), (phone2), (fax1), (fax2)) v(contact_number)
where v.contact_number is not null;
Run Code Online (Sandbox Code Playgroud)