Nếu bạn đang sử dụng SQL Server 2005+, thì bạn có thể sử dụng PIVOT
chức năng chuyển đổi dữ liệu từ hàng thành cột.
Có vẻ như bạn sẽ cần sử dụng sql động nếu không xác định được số tuần nhưng việc xem mã chính xác sẽ dễ dàng hơn khi sử dụng phiên bản được mã hóa cứng ban đầu.
Đầu tiên, đây là một số định nghĩa bảng nhanh và dữ liệu để sử dụng:
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);
Nếu các giá trị của bạn được biết, thì bạn sẽ viết mã cho truy vấn:
select *
from
(
select store, week, xCount
from yt
) src
pivot
(
sum(xcount)
for week in ([1], [2], [3])
) piv;
Xem Bản trình diễn SQL
Sau đó, nếu bạn cần tạo động số tuần, mã của bạn sẽ là:
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);
Xem Bản trình diễn SQL.
Phiên bản động, tạo danh sách week
số cần được chuyển đổi thành cột. Cả hai đều cho cùng một kết quả:
| STORE | 1 | 2 | 3 |
---------------------------
| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |