Wenn Sie die PIVOT
Funktion anwenden möchten, müssen Sie eine Aggregatfunktion verwenden, um das Ergebnis zu erhalten, aber Sie werden a Außerdem möchten Sie eine Fensterfunktion wie row_number()
verwenden, um eine eindeutige Sequenz für jeden Kontakt im Konto zu generieren.
select account, contact,
'contact'
+ cast(row_number() over(partition by account
order by contact) as varchar(10)) seq
from yourtable
Siehe SQL Fiddle with Demo:
Als erstes müssen Sie Ihre Daten ähnlich abzufragen. Dadurch wird eine neue Spalte mit der einzigartigen Sequenz erstellen:
| ACCOUNT | CONTACT | SEQ |
|---------|-----------|----------|
| 1 | 324324324 | contact1 |
| 1 | 674323234 | contact2 |
Wenn Sie eine begrenzte Anzahl von Spalten haben, dann könnten Sie schwer Code Anfrage:
select account,
contact1, contact2, contact3, contact4
from
(
select account, contact,
'contact'
+ cast(row_number() over(partition by account
order by contact) as varchar(10)) seq
from yourtable
) d
pivot
(
max(contact)
for seq in (contact1, contact2, contact3, contact4)
) piv;
Siehe SQL Fiddle with Demo
Wenn Wenn Sie eine unbekannte Anzahl von Spalten haben, müssen Sie dynamisches SQL verwenden:
Siehe SQL Fiddle with Demo. Beide geben Ihnen ein Ergebnis von:
| ACCOUNT | CONTACT1 | CONTACT2 | CONTACT3 | CONTACT4 |
|---------|-----------|-----------|-----------|-----------|
| 1 | 324324324 | 674323234 | (null) | (null) |
| 2 | 433243443 | 833343432 | (null) | (null) |
| 3 | 787655455 | (null) | (null) | (null) |
| 4 | 455435435 | 754327545 | (null) | (null) |
| 5 | 432432432 | 432433242 | 432455553 | 543544355 |