Tôi có một bảng có các cột sales(int)
, month(int)
. Tôi muốn lấy tổng doanh thu tương ứng với mỗi tháng. Tôi cần ouput dưới hình thức 12 cột tương ứng với mỗi tháng, trong đó sẽ có một hồ sơ duy nhất có bán hàng cho mỗi cột (tháng).Máy chủ SQL: chuyển đổi hàng thành cột
Trả lời
Bạn nên có một cái nhìn tại PIVOT để chuyển đổi hàng với các cột. Điều này ngăn chặn một tuyên bố chọn cho mỗi tháng. Một cái gì đó như thế này:
DECLARE @salesTable TABLE
(
[month] INT,
sales INT
)
-- Note that I use SQL Server 2008 INSERT syntax here for inserting
-- multiple rows in one statement!
INSERT INTO @salesTable
VALUES (0, 2) ,(0, 2) ,(1, 2) ,(1, 2) ,(2, 2)
,(3, 2) ,(3, 2) ,(4, 2) ,(4, 2) ,(5, 2)
,(6, 2) ,(6, 2) ,(7, 2) ,(8, 2) ,(8, 2)
,(9, 2) ,(10, 2) ,(10, 2) ,(11, 2) ,(11, 2)
SELECT [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11]
FROM
(
SELECT [month], sales
FROM @salesTable
) AS SourceTable
PIVOT
(
SUM(sales)
FOR [month] IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11])
) AS PivotTable
Không khá ... nhưng công trình này cũng
SELECT
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 1) [Sales1],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 2) [Sales2],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 3) [Sales3],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 4) [Sales4],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 5) [Sales5],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 6) [Sales6],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 7) [Sales7],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 8) [Sales8],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 9) [Sales9],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 10) [Sales10],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 11) [Sales11],
(SELECT SUM(Sales) FROM SalesTable WHERE [Month] = 12) [Sales12]
Bạn có thể làm điều đó với OLAP. Here là một liên kết khác đến tài liệu MSDN về chủ đề này.
Với OLAP, bạn có thể tạo khối lập phương với thông tin bạn có, với bố cục bạn cần.
Nếu bạn không muốn đi theo cách đó, bạn sẽ phải tạo bảng tóm tắt bằng .NET, Java, TransacSQL hoặc ngôn ngữ ưa thích của bạn để thao tác dữ liệu SQLServer.
Đây là cách thay thế để viết trục cung cấp cho bạn nhiều quyền kiểm soát hơn (đặc biệt là trên các tên cột). Việc tạo SQL động cũng dễ dàng hơn một chút.
Nó tương tự như câu trả lời của Robin, nhưng có lợi thế là chỉ đánh bảng một lần:
select
Sales1 = sum(case when Month = 1 then Sales end)
, Sales2 = sum(case when Month = 2 then Sales end)
, Sales3 = sum(case when Month = 3 then Sales end)
-- etc..
from SalesTable;
tôi đã làm một số điều tra, và nó có vẻ như các nhà điều hành trục mới chỉ là đường cú pháp cho loại truy vấn . Các kế hoạch truy vấn cuối cùng trông giống hệt nhau.
Là một điều thú vị sang một bên, toán tử tháo rời dường như cũng chỉ là đường cú pháp. Ví dụ:
Nếu bạn có một bảng như:
Create Table Sales (JanSales int, FebSales int, MarchSales int...)
Bạn có thể viết:
select unpivoted.monthName, unpivoted.sales
from Sales s
outer apply (
select 'Jan', JanSales union all
select 'Feb', FebSales union all
select 'March', MarchSales
) unpivoted(monthName, sales);
Và lấy dữ liệu unpivoted ...
Để dễ dàng transpose cột thành hàng với tên của nó, bạn nên sử dụng XML. Trong blog của tôi, tôi đã mô tả điều này với ví dụ: Link
- 1. Máy chủ SQL chuyển đổi các cột thành hàng
- 2. cột thành hàng trong máy chủ sql?
- 3. sql máy chủ đơn hàng nhiều cột thành một cột
- 4. Hiệu quả chuyển đổi các hàng thành các cột trong máy chủ sql
- 5. Máy chủ SQL: chuyển đổi varchar thành INT
- 6. Máy chủ SQL: kết hợp nhiều hàng thành một hàng
- 7. Chuyển đổi hàng thành các cột
- 8. Máy chủ SQL, Chuyển đổi NTEXT sang NVARCHAR (MAX)
- 9. Chuyển đổi cột thành các hàng giữ tên của cột
- 10. Chuyển đổi dữ liệu hàng thành cột nhị phân
- 11. Làm cách nào để chuyển đổi các cột Sql thành hàng?
- 12. sql sử dụng máy chủ cột
- 13. Máy chủ sql chọn cột theo số
- 14. Máy chủ SQL Xoay vòng nhiều cột
- 15. Chuyển đổi hàng thành cột bằng cách sử dụng 'Pivot' trong SQL Server
- 16. MS SQL: Chuyển đổi cột Ngày giờ thành nvarchar
- 17. Chuyển đổi cột thành chuỗi trong SQL Chọn
- 18. Chuyển hàng thành các cột trong MySQL
- 19. SQL chia nhiều cột thành nhiều hàng
- 20. Lưu tệp hình ảnh vào sql Máy chủ và chuyển đổi mảng byte thành hình ảnh
- 21. Máy chủ SQL Xoay nhiều cột dựa trên một cột
- 22. chuyển đổi địa chỉ IP thành tên máy chủ
- 23. Máy chủ SQL Chọn 10-20 kết quả hàng đầu?
- 24. Chuyển đổi nhóm SQL đơn giản thành LINQ to SQL
- 25. Máy chủ SQL - GROUP BY trên một cột
- 26. Máy chủ SQL cập nhật cột dấu thời gian
- 27. chuyển đổi dấu thời gian Epoch sang máy chủ sql (định dạng có thể đọc được)
- 28. Máy chủ SQL: Sao chép cột trong bảng
- 29. Máy chủ SQL: Tên cột không hợp lệ
- 30. Thêm một cột số không đến máy chủ sql bảng
bạn nên hiển thị cú pháp INSERT trước năm 2008 –
Có lẽ bạn đã đúng, mặc dù câu hỏi không đề cập đến phiên bản SQL Server. Cập nhật câu trả lời của tôi để thông báo cho người đọc về sự khác biệt cú pháp. –
@sahil garg: Bạn có làm việc này không? –