2013-07-04 30 views
2

我有一個SQL查詢返回1列,多列標題:sql中轉換單排鍵/值列

Col 1 | Col 2 | Col 3 
val 1 | Val 2 | Val 3 

是有辦法此行轉換爲2列,即:

Col 1 | Val 1 
Col 2 | Val 2 
Col 3 | Val 3 

這是上運行的SQLServer 2008 R2

編輯:添加一個更好的例子

Product_Code | Product_Name | Customer_Name 
    101   | yummy cake | derps cake shop 

從簡單

select p.prod_code, p.prod_name, c.cust_name from product p 
inner join customer c on  p.id = c.id 

類型的查詢來。我想展示的是:

col heading 1| col heading 2 
    product_code | 101 
    Product_Name | yummy cake 
    customer_name| derps cake shop 
+1

查找[透視和逆透視(HTTP: //msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx)。 – dasblinkenlight

+0

是固定的列數?我的意思是隻有3列? – Romesh

+0

是的,它會被修復。 – Jay

回答

4

試試這個

CREATE TABLE #Table1 
    ([Col 1] varchar(5), [Col 2] varchar(5), [Col 3] varchar(5)) 
; 

INSERT INTO #Table1 
    ([Col 1], [Col 2], [Col 3]) 
VALUES 
    ('val 1', 'Val 2', 'Val 3') 
; 

SELECT Col,Val FROM 
(
SELECT * FROM #Table1 
) P 
UNPIVOT 
(
    val FOR Col IN ([Col 1], [Col 2], [Col 3]) 
) pvt 

DROP TABLE #Table1 
+0

我不得不添加轉換到select語句(不使用select *),但它的工作完美。謝謝! – Jay

2

您可以使用UNPIVOT在你的SQL Server版本:

CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int, 
    Emp3 int, Emp4 int, Emp5 int); 
GO 
INSERT INTO pvt VALUES (1,4,3,5,4,4); 
INSERT INTO pvt VALUES (2,4,1,5,5,5); 
INSERT INTO pvt VALUES (3,4,3,5,4,4); 
INSERT INTO pvt VALUES (4,4,2,5,5,4); 
INSERT INTO pvt VALUES (5,5,1,5,5,5); 
GO 
SELECT * FROM pvt 
--Unpivot the table. 

SELECT VendorID, Employee, Orders 
FROM 
    (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5 
    FROM pvt) p 
UNPIVOT 
    (Orders FOR Employee IN 
     (Emp1, Emp2, Emp3, Emp4, Emp5) 
)AS unpvt; 
GO