TSQL - Hilfe bei UNPIVOT
-
22-09-2019 - |
Frage
Ich bin Umwandlung von Daten aus dieser Legacy-Tabelle:
Phones(ID int, PhoneNumber, IsCell bit, IsDeskPhone bit, IsPager bit, IsFax bit)
Diese Bit-Felder sind nicht nullables und möglicherweise alle vier Bit-Felder 1 sein können.
Wie kann ich Entpivotisierung diese Sache, so dass ich mit einer separaten Zeile für jedes Bit-Feld am Ende = 1 . Zum Beispiel, wenn die Original-Tabelle sieht wie folgt aus ...
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
... Ich mag das Ergebnis folgende sein:
ID PhoneNumber Type
-----------------------
1 123-4567 Cell
1 123-4567 Pager
2 123-6567 Desk
3 123-7567 Fax
4 123-8567 Desk
Danke!
Lösung
2005/2008 Version
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
Andere Tipps
Versuchen Sie diese:
DROP TABLE #Phones
CREATE TABLE #Phones
(
Id int,
PhoneNumber varchar(50),
IsCell bit,
IsPager bit,
IsDeskPhone bit,
IsFax bit
)
INSERT INTO #Phones VALUES (1, '123-4567', 1, 1, 0, 0)
INSERT INTO #Phones VALUES (2, '123-6567', 0, 0, 1, 0)
INSERT INTO #Phones VALUES (3, '123-7567', 0, 0, 0, 1)
INSERT INTO #Phones VALUES (4, '123-8567', 0, 0, 1, 0)
SELECT Id, PhoneNumber, [Type]
FROM (
SELECT Id, PhoneNumber,
Cell = IsCell, Pager = IsPager,
Desk = IsDeskPhone, Fax = IsFax
FROM #Phones
) a
UNPIVOT(
something FOR [Type] IN (Cell, Pager, Desk, Fax )
) as upvt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow