2012-07-09 14 views
5

Tôi muốn chia kết quả cột duy nhất từ ​​một truy vấn vào 4 cột:SQL cột đơn phân chia trên mutiple cột

nguồn mẫu: (Select [FirstName from User)
Peter
Mary
John
Tina
Carl
Jane
Hóa đơn
Sarah

Tôi muốn giống như thế này:

Column1 Column2 Column3 Column4 
Peter  Mary  John  Tina 
Carl  Jane  Bill  Sarah 

Trả lời

8

Bạn cần để có một cột duy nhất để ORDER BY để nhận được kết quả xác định nhưng điều gì đó dọc theo các dòng này sẽ hoạt động.

;WITH T 
    AS (SELECT [FirstName], 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1)/4 AS Row, 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1) % 4 AS Col 
     FROM [User]) 
SELECT [0] AS Column1, 
     [1] AS Column2, 
     [2] AS Column3, 
     [3] AS Column4 
FROM T PIVOT (MAX(name) FOR Col IN ([0], [1], [2], [3])) P 
ORDER BY Row 
+0

+1, nhưng tôi nghĩ rằng row_number() cho Col cũng cần '-1'. –

+0

Cảm ơn bạn! Tôi đã làm cho nó làm việc bằng cách sử dụng 4 bảng tạm thời với Modulus khác nhau và tham gia vào các cuộc biểu tình, nhưng CTE trông đẹp hơn! – callisto

+0

@ NikolaMarkovinović - Đúng, hoặc nhu cầu bí danh thay đổi khi nó xuất ra '1,2,3,0,1,2,3,0'. Đã chỉnh sửa theo đề xuất của bạn. –

1

Ở đây bạn có nhiều lựa chọn, tìm kiếm một là phù hợp hơn đối với trường hợp của bạn: Create columns from list of values

liên kết trước hướng đến even more information

+0

Tôi đã xem xét liên kết nhưng chỉ hiển thị cách tạo cột đơn chứa nhiều giá trị. Tôi muốn chia nhỏ 1 cột thành 4 cột – callisto

+0

Có, bạn nói đúng, tôi chỉ chỉnh sửa câu trả lời của tôi, có thể là nhận xét và không phải là câu trả lời đầy đủ vì các liên kết được cung cấp cung cấp cho bạn nhiều thông tin nhưng không trả lời chính xác câu hỏi. – Yaroslav