SQL 服务器逆透视列

SQL Server unpivot columns

我有一个 table,我想在 SQL 语句中取消透视。它由一个人和 phone 1 到 5 组成。现在我正在为每个 phone 做一个联合,但我担心它会导致性能问题。

列:

PERSON_GUID, 
PHONE_1, PHONE_1_VOICE_FLG, 
PHONE_2, PHONE_2_VOICE_FLG, 
PHONE_3, PHONE_3_VOICE_FLG, 
PHONE_4, PHONE_4_VOICE_FLG, 
PHONE_5, PHONE_5_VOICE_FLG

在考虑性能的情况下,我如何最好地取消透视该行,以便结果为:

PERSON_GUID, PHONE_NO, VOICE_FLG

我更喜欢 UNPIVOT 但至于你的解决方案 -
确保您使用的是 UNION ALL 而不是 UNION.
UNION ALL 只是一个接一个地溢出查询结果。
UNION 消除了行重复,这是您为性能付出代价的地方。


select  PERSON_GUID,PHONE_NO,
        case right(col,1)
            when 1 then PHONE_1_VOICE_FLG
            when 2 then PHONE_2_VOICE_FLG
            when 3 then PHONE_3_VOICE_FLG
            when 4 then PHONE_4_VOICE_FLG
            when 5 then PHONE_5_VOICE_FLG
        end VOICE_FLG

from    t unpivot (PHONE_NO for col in
            (PHONE_1,PHONE_2,PHONE_3,PHONE_4,PHONE_5)) u