2013-07-04 3 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

EDIT: Добавление лучший пример

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

посмотреть [Pivot и UNPIVOT] (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 
Смежные вопросы