TSQL - 帮助UNPIVOT

Gus*_*nti 6 sql t-sql sql-server unpivot

我正在转换此遗留表中的数据:
Phones(ID int, PhoneNumber, IsCell bit, IsDeskPhone bit, IsPager bit, IsFax bit)

这些位字段不是空的,并且可能所有四个位字段都可以是1.

我怎样才能解开这个东西,以便每个位字段= 1最终得到一个单独的行 .例如,如果原始表看起来像这样......

ID, PhoneNumber, IsCell, IsPager, IsDeskPhone, IsFax
----------------------------------------------------
1   123-4567     1       1        0            0
2   123-6567     0       0        1            0
3   123-7567     0       0        0            1
4   123-8567     0       0        1            0
Run Code Online (Sandbox Code Playgroud)

...我希望结果如下:

ID   PhoneNumber   Type
-----------------------
1    123-4567      Cell
1    123-4567      Pager
2    123-6567      Desk
3    123-7567      Fax
4    123-8567      Desk
Run Code Online (Sandbox Code Playgroud)

谢谢!

SQL*_*ace 6

2005/2008版

SELECT ID, PhoneNumber, Type
FROM
(SELECT ID, PhoneNumber,IsCell, IsPager, IsDeskPhone, IsFax
 FROM Phones) t
UNPIVOT
( quantity FOR Type  IN
    (IsCell, IsPager, IsDeskPhone, IsFax)
) AS u
where quantity = 1
Run Code Online (Sandbox Code Playgroud)

另见列到行(UNPIVOT)