Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przesunąć wartości kolumn w MySQL?

Użyj coalesce() i podzapytanie

select id, o1, 
       CASE WHEN o2!=o1 THEN o2 END o2,
       CASE WHEN o3!=o2 THEN o3 END o3 
FROM
( select id, coalesce(org1,org2,org3) o1,
             coalesce(org2,org3)      o2,
                      org3            o3 from tbl ) t

AKTUALIZUJ

Poprzednia odpowiedź nie była wystarczająca, o czym całkiem słusznie dowiedział się R2D2. Niestety nie możesz wykonywać CTE w mysql, więc zamiast tego stworzyłem widok (rozszerzyłem przykład o kolejną kolumnę org4 ):

CREATE VIEW vert AS 
select id i,1 n, org1 org FROM tbl where org1>'' UNION ALL
select id,2, org2 FROM tbl where org2>'' UNION ALL
select id,3, org3 FROM tbl where org3>'' UNION ALL
select id,4, org4 FROM tbl where org4>'';

W tym widoku można teraz wykonać następujące czynności:

SELECT id,
(select org from vert where i=id order by n limit 1) org1,
(select org from vert where i=id order by n limit 1,1) org2,
(select org from vert where i=id order by n limit 2,1) org3,
(select org from vert where i=id order by n limit 3,1) org4
FROM tbl

Niezbyt piękne, ale spełnia swoje zadanie, zobacz tutaj:SQLfiddle

wejście:

| id |   org1 |   org2 |    org3 |   org4 |
|----|--------|--------|---------|--------|
|  1 |     HR | (null) |   Staff |     IT |
|  2 | (null) |     IT |     Dev | (null) |
|  3 | (null) | (null) | Finance |     HR |

wyjście:

| id |    org1 |  org2 |   org3 |   org4 |
|----|---------|-------|--------|--------|
|  1 |      HR | Staff |     IT | (null) |
|  2 |      IT |   Dev | (null) | (null) |
|  3 | Finance |    HR | (null) | (null) |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nic się nie wyświetla po załadowaniu strony

  2. Jak utworzyć bazę danych MySQL w cPanel?

  3. Jak stworzyć wielodostępną bazę danych ze współdzielonymi strukturami tabel?

  4. Określ rangę na podstawie wielu kolumn w MySQL

  5. Sprawdź wartość w wierszu MySQL