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

时间:2018-07-18 11:21:32

标签: sql sql-server database join

我有一张桌子:

  • 人名
  • 名称
  • 电话1
  • Phone2
  • 传真1
  • 传真2

我有这样的记录:

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    

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

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

1   Test    0123
1   Test    0123
2   Test    567 
2   Test    789

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

使用apply

Select personId, name, v.value from Person
cross apply (values(Phone1),
                   (Phone2),
                    (Fax1),
                    (Fax2))v(value)
where ISNULL(LTRIM(RTRIM(v.value)),'')<>''

答案 2 :(得分:1)

这应该适用于2012+。对于旧版本,请将iif转换为大小写。

bank_stocks.head()