2015-05-11 3 views
2

У меня довольно сложный запрос, который извлекает некоторые данные. Результирующий набор выглядит следующим образом:Слияние нескольких строк в один

mon | tue | wed | thu | fri | sat | sun | dispatch | driver_id | name | phone 
x | x | x | x | x | data | x |   1 |   2 | Bob | 123 
x | data | x | x | x | x | x |   1 |   2 | Bob | 123 
x | x | x | data | x | x | x |   1 |   2 | Bob | 123 

мне интересно, если кто-нибудь может мне помочь, чтобы объединить несколько столбцов, которые имеют тот же dispatch | driver_id | name | phone в ONE ROW

Поэтому я закончу с этим (все data значения замещенных x значения):

mon | tue | wed | thu | fri | sat | sun | dispatch | driver_id | name | phone 
    x | data | x | data | x | data | x |   1 |   2 | Bob | 123 
  • Data Вал эс различны, и они TEXT, в то время как x значения всегда представлены как x
  • Там будут различные dispatch | driver_id | name | phone комбинации
+0

так что не будет разных записей с другим значением для вторника? для одного и того же драйвера, имени и телефона? –

+0

'x' действительно есть 'x'? – Strawberry

+0

@Strawberry, это правильно. Я показываю 'x', где нет данных – Andrew

ответ

2

Если значения «х» являются NULL, вы можете использовать запрос следующим образом:

SELECT 
    MAX(mon) AS mon, 
    MAX(tue) AS tue, 
    MAX(wed) AS wed, 
    MAX(thu) AS thu, 
    MAX(fri) AS fri, 
    MAX(sat) AS sat, 
    MAX(sun) AS sun, 
    dispatch, 
    driver_id, 
    name, 
    phone 
FROM 
    yourtable 
GROUP BY 
    dispatch, 
    driver_it, 
    name, 
    phone 

но если значения «х» точная строка «х», то вы shuld использовать что-то вроде этого:

MAX(CASE WHEN mon!='x' THEN mon END) as mon, 
MAX(CASE WHEN tue!='x' THEN tue END) as tue, 
... 

Это будет работать, если только две или несколько разных строк имеют разные значения для одного и того же столбца.

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