Ако ще приложите PIVOT
функция, ще трябва да използвате агрегатна функция, за да получите резултата, но също така ще искате да използвате функция за прозорец като row_number()
за генериране на уникална последователност за всеки контакт в акаунта.
Първо, ще потърсите данните си подобно на:
изберете акаунт, контакт, 'contact' + cast(row_number() over(разделяне по акаунт, ред по контакт) като varchar(10)) seq от вашата таблица
Вижте SQL Fiddle с демонстрация. Това ще създаде нова колона с уникалната последователност:
<предварителен код>| АКАУНТ | КОНТАКТ | SEQ ||--------|-----------|----------|| 1 | 324324324 | контакт1 || 1 | 674323234 | контакт2 |Ако имате ограничен брой колони, тогава можете да кодирате заявката си:
изберете акаунт, contact1, contact2, contact3, contact4from (изберете акаунт, контакт, 'контакт' + cast(row_number() over(разделяне по акаунт, ред по контакт) като varchar(10)) seq от вашата таблица) dpivot( max(contact) за seq in (contact1, contact2, contact3, contact4)) piv;
Вижте SQL Fiddle с демонстрация
Ако имате неизвестен брой колони, тогава ще трябва да използвате динамичен SQL:
ДЕКЛАРИРАНЕ @cols КАТО NVARCHAR(MAX), @query КАТО NVARCHAR(MAX)изберете @cols =STUFF((SELECT ',' + QUOTENAME(seq) от ( изберете 'contact' + cast(row_number()) over(разделяне по ред на акаунт чрез контакт) като varchar(10)) seq от вашата таблица ) d група по seq ред по seq FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')set @query ='ИЗБЕРЕТЕ акаунт, ' + @cols + ' от ( изберете акаунт, контакт, ''контакт'' + прехвърляне(row_number() над (разделяне по акаунт, ред по контакт) като varchar(10)) seq от вашата таблица ) x въртене ( макс (контакт) за seq in (' + @cols + ') ) p 'изпълни sp_executesql @query;
Вижте SQL Fiddle с демонстрация. И двете ще ви дадат резултат от:
<предварителен код>| АКАУНТ | КОНТАКТ1 | КОНТАКТ2 | КОНТАКТ3 | КОНТАКТ4 ||---------|-----------|-----------|-----------|- ----------|| 1 | 324324324 | 674323234 | (нула) | (нула) || 2 | 433243443 | 833343432 | (нула) | (нула) || 3 | 787655455 | (нула) | (нула) | (нула) || 4 | 455435435 | 754327545 | (нула) | (нула) || 5 | 432432432 | 432433242 | 432455553 | 543544355 |