2012-06-08 27 views
6

Tôi có một bảng có các cột nói là col1, col2, col3. Bảng có nhiều hàng trong đó.Làm thế nào để chuyển đổi một tiêu đề cột và giá trị của nó thành hàng trong sql?

Giả sử val1, val2, val3 là một hàng như vậy. Tôi muốn nhận kết quả là

Col1, Val1 
Col2, Val2 
Col3, Val3 

Đó là 3 hàng - một cho mỗi cột và giá trị của cột.

Tôi đang sử dụng SQL Server 2008. Tôi đã đọc về trục xoay. Được xoay quanh một cách để giải quyết vấn đề này? Ai đó có thể định tuyến cho tôi một số ví dụ hoặc giải pháp làm thế nào để giải quyết vấn đề này?

Thanks a lot

Trả lời

5

Có lẽ một cái gì đó như thế này:

dữ liệu thử nghiệm

DECLARE @T TABLE(Col1 INT, Col2 INT, Col3 INT) 
INSERT INTO @T 
VALUES (1,1,1) 

Query

SELECT 
    * 
FROM 
(
    SELECT 
     t.Col1, 
     t.Col2, 
     t.Col3 
    FROM 
     @T AS t 
) AS SourceTable 
UNPIVOT 
(
    Value FOR Col IN 
    (Col1,Col2,Col3) 
) AS unpvt 

Output

1 Col1 
1 Col2 
1 Col3 
+0

Thankyou rất nhiều Arion. Đây là những gì tôi đã tìm kiếm chính xác. – Vinoth

+0

Không sao cả .. Rất vui được giúp :) – Arion

2

Để thực hiện điều này là điều mà đọc phần sau đây: Using PIVOT and UNPIVOT

chức năng Pivot cho phép bạn chuyển đổi các giá trị liên tiếp từ các cột ..

Ngoài ra kiểm tra: Dynamic Pivoting in SQL Server

Ví dụ:

create table #temptable(colorname varchar(25),Hexa varchar(7),rgb varchar(1), rgbvalue tinyint)  
GO 
insert into #temptable values('Violet','#8B00FF','r',139); 
insert into #temptable values('Violet','#8B00FF','g',0); 
insert into #temptable values('Violet','#8B00FF','b',255); 
insert into #temptable values('Indigo','#4B0082','r',75); 
insert into #temptable values('Indigo','#4B0082','g',0); 
insert into #temptable values('Indigo','#4B0082','b',130); 
insert into #temptable values('Blue','#0000FF','r',0); 
insert into #temptable values('Blue','#0000FF','g',0); 
insert into #temptable values('Blue','#0000FF','b',255); 



SELECT colorname,hexa,[r], [g], [b] 
FROM 
(SELECT colorname,hexa,rgb,rgbvalue 
    FROM #temptable) AS TableToBePivoted 
PIVOT 
( 
sum(rgbvalue) 
FOR rgb IN ([r], [g], [b]) 
) AS PivotedTable; 
+0

cảm ơn Pranay nó thực sự hữu ích. – Vinoth

0

Tạo một bảng temproary:

CREATE TABLE #table2 
(
name NCHAR, 
bonus INT 
) 

Bây giờ Chọn và thực hiện câu lệnh dưới đây nếu có sản phẩm nào.

SELECT * FROM #table2 

INSERT INTO #table2 (name,bonus) VALUES ('A',10) 
INSERT INTO #table2 (name,bonus) VALUES ('B',20) 
INSERT INTO #table2 (name,bonus) VALUES ('C',30) 

Sau khi chèn các giá trị vào bảng. lựa chọn và thực thi các dòng dưới đây nếu bạn nhận hồ sơ:

SELECT * FROM #table2 

Input:

name bonus 
A 10 
B 20 
C 30 

Thay đổi đầu vào thành như kết quả này

Kết quả:

Cost  A B C 
Bonus 10 20 30 

Bằng cách sử dụng này mã:

SELECT 'Bonus' AS Cost, 
[A],[B],[C] 
FROM 
(SELECT name, Bonus 
FROM #table2) AS TempTbl 
PIVOT 
(
    AVG(bonus) 
    FOR [name] IN ([A],[B],[C]) 
) AS PivotTable; 
Các vấn đề liên quan