2016-01-18 2 views
2

У меня есть простой SQL выберите запрос, который возвращает следующий результат (один ряд):преобразование одиночных строк таблицы + имена столбцов в столбцы

[0] [1] [2] [3] [13] (column headings) 
5102 4516 31 95 2 (row data) 

Использование SQL, мне нужно, чтобы преобразовать это вернуть две колонки (5 строки), который выглядит следующим образом:

[id] [val] 
0  5102 
1  4516 
2  31 
3  95 
13 2 

Я ожидаю, что смогу сделать это с помощью шарнира или чего-то подобного.

SQL-запрос, используемый для получения первого (однорядные) результат:

SELECT * FROM TABLE WHERE KEY = BLAH 
+1

Какой двигатель базы данных вы используете –

ответ

1

Вы должны unpivot данные

Для SQL Server использования Cross Apply. Попробуйте

SELECT id,val 
FROM yourtable 
     CROSS apply (VALUES ([0],'0'), 
          ([1],'1'), 
          ([2],'2'), 
          ([3],'3'), 
          ([13],'13')) cs (val,id) 

или использовать Union ALL для UNPIVOT данные

SELECT [0] AS val,'0' AS id 
FROM yourtable 
UNION ALL 
SELECT [1],'1' 
FROM yourtable 
UNION ALL 
SELECT [2],'2' 
FROM yourtable 
UNION ALL 
SELECT [3],'3' 
FROM yourtable 
UNION ALL 
SELECT [13],'13' 
FROM yourtable 
+0

Великий, который работал! Проблема с соединением all (я использую MySQL) заключается в том, что «таблица» является подзапросом, поэтому наличие того же подзапроса, скопированного 4 или 5 раз (или больше), не является идеальным. Есть ли способ сделать это, не требуя дублирования подзапроса для каждого результата строки? – David