2010-08-04 7 views
1

У меня есть таблица, в которой хранятся записи, как это:Объединение нескольких строк в таблице в 1 Resultset ряд

name  | stat | value 
-------------------------- 
object1 | stat1 | val1 
object1 | stat2 | val2 
object1 | stat3 | val3 
object1 | stat4 | val4 

Но я хотел бы, чтобы запросить данные, так что возвращает строки как этот

name | stat1| stat2| stat3| stat4 
------------------------------------- 
object1 | val1 | val2 | val3 | val4 

Будут ли я использовать аргументы case или как это сделать? Мой пример показывает только 4 возможные статистики, но, надеюсь, я могу создать что-то достаточно динамичное, если в будущем я буду добавлять новую статистику, запрос не нужно будет переписывать. Если это невозможно, какие у меня варианты?

ответ

5

Типичный запрос поворота:

SELECT t.name, 
     MAX(CASE WHEN t.stat = 'stat1' THEN t.value ELSE NULL END) AS stat1, 
     MAX(CASE WHEN t.stat = 'stat2' THEN t.value ELSE NULL END) AS stat2, 
     MAX(CASE WHEN t.stat = 'stat3' THEN t.value ELSE NULL END) AS stat3, 
     MAX(CASE WHEN t.stat = 'stat4' THEN t.value ELSE NULL END) AS stat4 
    FROM TABLE t 
GROUP BY t.name 

Учитывая то, что значения должны быть статически, этот запрос должен быть преобразован в динамический SQL, если вы хотите, чтобы справиться с динамичной ситуации - использовать MySQL's Prepared Statement syntax для динамического SQL .. .

+0

Спасибо. Это прекрасно работает. – Nathan

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