Я хочу объединить два столбца в новый столбец, но только если один не пуст, а затем отсортировать по этому новому столбцу.(Баз данных) - PullRequest
2 голосов
/ 12 июля 2011

Допустим, у меня есть две колонки, city и sitename.

City        Sitename
Boston      Hynes Convention Center 
Baltimore   The Sheraton 
NYC         Times Square
            Applebees 
Tuoson       
Beijing     
            My Backyard

Я специально оставил некоторые поля в каждом столбце пустыми, и вот почему. Когда я выводю эту информацию с помощью PHP, я хочу, чтобы она вышла в виде {city} - {sitename}, но ТОЛЬКО если они оба не пустые. Если какой-либо из них не указан, я просто хочу показать {city} или {штат}, в зависимости от того, что это. Затем, как только у меня появится этот новый столбец объединенных (или нет) значений, я хочу отсортировать свои данные по этому новому столбцу A - Z. Так что в итоге это должно выглядеть примерно так ...

City         Sitename                  Combined
             Applebees                 Applebees
Baltimore    The Sheraton              Baltimore - The Sheraton
Beijing                                Beijing
Boston       Hynes Convention Center   Baltimore - Hynes Convention Center
             My Backyard               My Backyard
NYC          Times Square              NYC - Times Square
Tuoson                                 Tuoson

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

О, и это не изменение таблицы, это то, как я хочу получить данные. Так что утверждение должно быть что-то вроде ...

"ВЫБРАТЬ * ИЗ СТОЛ ..."

Ответы [ 4 ]

5 голосов
/ 12 июля 2011

Это не проверено, прошу прощения.

Select Trim(BOTH ' - ' From Concat(Coalesce(city, ''), ' - ', Coalesce(sitename, ''))) As citysite
From my_table
Order By citysite

Я считаю, что MySQL позволяет упорядочивать по столбцу с псевдонимами. Если это не так, просто скопируйте содержимое Trim () и в Order By.

1 голос
/ 12 июля 2011
SELECT 
   COALESCE(City,'') as City, 
   COALESCE(Sitename,'') AS Sitename, 
   CASE 
     WHEN COALESCE(City,'')='' THEN Sitename
     WHEN COALESCE(City,'')<>'' AND COALESCE(Sitename,'')='' THEN City
     ELSE City + ' - ' + Sitename 
   END AS Combined
FROM table
ORDER BY 
 CASE 
  WHEN COALESCE(City,'')='' THEN Sitename
  WHEN COALESCE(City,'')<>'' AND COALESCE(Sitename,'')='' THEN City
  ELSE City + ' - ' + Sitename 
 END

Это должно быть довольно просто.

0 голосов
/ 12 июля 2011
select  City + ' ' + Sitename   
where City ....
  and Sitename ...
order by City + ' ' + Sitename   
0 голосов
/ 12 июля 2011
SELECT case when city is null then
           sitename
       else
           city || ' - ' || sitename
       end 
FROM table

?

...