Jika Anda menggunakan SQL Server 2005+, maka Anda dapat menggunakan PIVOT
berfungsi untuk mengubah data dari baris menjadi kolom.
Sepertinya Anda perlu menggunakan sql dinamis jika minggu tidak diketahui tetapi lebih mudah untuk melihat kode yang benar menggunakan versi hard-code pada awalnya.
Pertama, berikut adalah beberapa definisi tabel cepat dan data untuk digunakan:
CREATE TABLE yt
(
[Store] int,
[Week] int,
[xCount] int
);
INSERT INTO yt
(
[Store],
[Week], [xCount]
)
VALUES
(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);
Jika nilai Anda diketahui, Anda akan membuat hard-code kueri:
select *
from
(
select store, week, xCount
from yt
) src
pivot
(
sum(xcount)
for week in ([1], [2], [3])
) piv;
Lihat Demo SQL
Kemudian jika Anda perlu membuat nomor minggu secara dinamis, kode Anda akan menjadi:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Week)
from yt
group by Week
order by Week
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT store,' + @cols + ' from
(
select store, week, xCount
from yt
) x
pivot
(
sum(xCount)
for week in (' + @cols + ')
) p '
execute(@query);
Lihat Demo SQL.
Versi dinamis, menghasilkan daftar week
angka yang harus diubah menjadi kolom. Keduanya memberikan hasil yang sama:
| STORE | 1 | 2 | 3 |
---------------------------
| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |