Ако използвате SQL Server 2005+, тогава можете да използвате PIVOT
функция за трансформиране на данните от редове в колони.
Изглежда, че ще трябва да използвате динамичен sql, ако седмиците са неизвестни, но е по-лесно да видите правилния код, като използвате твърдо кодирана версия първоначално.
Първо, ето някои бързи дефиниции на таблици и данни за използване:
СЪЗДАВАНЕ НА ТАБЛИЦА yt ( [Store] int, [Week] int, [xCount] int); INSERT INTO yt( [Магазин], [Седмица], [xCount])СТОЙНОСТИ (102, 1, 96), (101, 1, 138), (105, 1, 37), (109, 1, 59), ( 101, 2, 282), (102, 2, 212), (105, 2, 78), (109, 2, 97), (105, 3, 60), (102, 3, 123), (101, 3, 220), (109, 3, 87);
Ако вашите стойности са известни, тогава ще кодирате заявката:
изберете *от ( изберете магазин, седмица, xCount от yt ) srcpivot( sum(xcount) за седмица в ([1], [2], [3])) piv;
Вижте демонстрация на SQL
След това, ако трябва да генерирате динамично номера на седмицата, вашият код ще бъде:
ДЕКЛАРИРАЙТЕ @cols КАТО NVARCHAR(MAX), @query КАТО NVARCHAR(MAX)изберете @cols =STUFF((SELECT ',' + QUOTENAME(седмица) от yt група по седмица подреждане по седмица ЗА XML PATH( ''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')set @query ='ИЗБЕРЕТЕ магазин,' + @cols + ' от ( изберете магазин, седмица, xCount от yt ) x pivot ( sum(xCount) за седмица в (' + @cols + ') ) p 'execute(@query);
Вижте демонстрация на SQL.
Динамичната версия генерира списък на седмица
числа, които трябва да се преобразуват в колони. И двете дават един и същ резултат: