2014-06-06 5 views
-1

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

--------------------------- 
| Timestamp | Value | Name| 
--------------------------- 
| 12345678 | 2  | abc | 
--------------------------- 
| 12345678 | 3  | abc | 
--------------------------- 
| 78910111 | 4  | cde | 
-------------------------- 
| 56789101 | 1  | abc | 
--------------------------- 
| 56789101 | 2  | cde | 
--------------------------- 

мне нужно, чтобы превратить его в нечто вроде этого:

------------------------- 
| Timestamp | abc | cde | 
------------------------- 
| 12345678 | 5 | 0 | 
------------------------- 
| 56789101 | 1 | 2 | 
------------------------- 
| 78910111 | 0 | 4 | 
------------------------- 

Если значения в таблица выше представляет собой суммы для определенного имени в конкретную временную метку имена в нижней таблице не известны и могут быть динамическими. Для этого мне нужен SQL-запрос.

+0

Нашли статью по теме, что дает некоторые ответы: http://stackoverflow.com/questions/1599788/mysql-query-to-dynamically-convert-row-data-to-columns –

+1

что, если у вас 1000+ имя в таблице? –

+0

Хотя существует верхний предел строк столбцов, который необходимо просмотреть. Если это не проблема (у вас будет удобно менее 1000 столбцов), и вы хотите сделать это динамически, то вам нужно искать динамический SQL (для SQL Server) PL/SQL (для Oracle) и т. Д. Какую систему вы используете? – ashcanschool

ответ

0

Вы можете попробовать следующий запрос: -

SELECT timestamp, SUM(CASE WHEN name = 'abc' THEN VALUE ELSE 0 END) AS abc, 
SUM(CASE WHEN name = 'cde' THEN VALUE ELSE 0 END) AS cde 
FROM tab 
GROUP BY timestamp; 

Вот SQL Скрипки.

http://sqlfiddle.com/#!2/a721f4/8

+1

Имена неизвестны перед началом работы и могут быть более 2. –

Смежные вопросы