2016-09-03 2 views
3

У меня есть таблица, из которой мне нужно получить результаты, как показано ниже.SQL Query для поворота и объединения строк

enter image description here

до сих пор я могу повернуть F1 и объединить CurrentValue & mismatchcount используя ниже SQL.

SELECT object, GROUP_CONCAT(currentvalue ,"-", mismatchcount) as F1 
FROM tableT where freq = F1 
GROUP BY object 

, но мне нужны все три частоты рядом друг с другом в качестве выхода.

+1

Пожалуйста, отредактируйте ваш вопрос и включите образцы данных и желаемые результаты в виде * text * таблиц в вопрос. –

ответ

4

Вы можете использовать этот запрос:

SELECT object, 
     GROUP_CONCAT(CASE freq WHEN 'F1' THEN 
         CONCAT(currentvalue, "-", mismatchcount) END SEPARATOR " ") as F1, 
     GROUP_CONCAT(CASE freq WHEN 'F2' THEN 
         CONCAT(currentvalue, "-", mismatchcount) END SEPARATOR " ") as F2, 
     GROUP_CONCAT(CASE freq WHEN 'F3' THEN 
         CONCAT(currentvalue, "-", mismatchcount) END SEPARATOR " ") as F3 
FROM  tableT 
GROUP BY object 

CONCAT функция используется для конкатенации значений из одной и той же записи, GROUP_CONCAT используются для конкатенации таких значений из разных записей. Выражение CASE WHEN оценивается для нескольких записей (с разными значениями для freq) и, таким образом, возвращает несколько значений. Но из этих значений ненулевые значения должны конкатенироваться. Сепаратор установлен в пространство.

+0

Привет Trincot Я не могу использовать MAX из вашего оператора sql. почему он используется? –

+0

Просто добавил объяснение об использовании 'MAX' в моем ответе. – trincot

+0

Спасибо trincot. Но столбец freq может иметь повторяющиеся значения с разными значениями currentvalue и mismatchcount. Я обновил изображение. пожалуйста, обратите внимание. –

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