Ефективно преобразуване на редове в колони в sql server
Търся ефективен начин за преобразуване на редове в колони в SQL сървър, чух, че PIVOT не е много бърз, а трябва да се справям с много записи.
Това е моят пример:
-------------------------------
| Id | Value | ColumnName |
-------------------------------
| 1 | John | FirstName |
| 2 | 2.4 | Amount |
| 3 | ZH1E4A | PostalCode |
| 4 | Fork | LastName |
| 5 | 857685 | AccountNumber |
-------------------------------
Това е моят резултат:
---------------------------------------------------------------------
| FirstName |Amount| PostalCode | LastName | AccountNumber |
---------------------------------------------------------------------
| John | 2.4 | ZH1E4A | Fork | 857685 |
---------------------------------------------------------------------
Как мога да построя резултата?
358
2
Съществуват няколко начина за трансформиране на данни от няколко реда в колони.
Използване на
PIVOT
В SQL Server можете да използвате функцията
PIVOT
, за да трансформирате данните от редове в колони:Вижте Demo.
Pivot с неизвестен брой
columnnames
Ако имате неизвестен брой
columnnames
, които искате да транспонирате, можете да използвате динамичен SQL:Вижте Demo.
Използване на агрегирана функция
Ако не искате да използвате функцията
PIVOT
, можете да използвате агрегираща функция с изразCASE
:Вижте Demo.
Използване на многократни съединения
Това може да бъде изпълнено и чрез многократни обединения, но ще ви е необходима колона за асоцииране на всеки от редовете, която не е налична в примерните ви данни. Но основният синтаксис би бил:
тъй като въртенето на данни все още е горещо, реших да добавя нещо от мен. Това е по-скоро метод, а не само един скрипт, но ви дава много повече възможности. На първо място има 3 скрипта, които трябва да разположите:
ColumnActionList
] -> съдържа данни като параметърproc_PivotPrepare
] -> подготвя нашите данниproc_PivotExecute
] -> изпълнява скрипта