sql >> Databáze >  >> RDS >> Mysql

Jak posunout hodnoty sloupců v MySQL?

Použijte coalesce() a poddotaz

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

AKTUALIZACE

Předchozí odpověď nebyla dostatečná, jak R2D2 zjistil zcela správně. Bohužel nemůžete dělat CTE v mysql, takže jsem místo toho vytvořil pohled (příklad jsem rozšířil o další sloupec 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>'';

S tímto zobrazením je nyní možné provést následující:

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

Není to krásné, ale svou práci zvládne, viz zde:SQLfiddle

vstup:

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

výstup:

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


  1. jak vytvořit dotaz MySql pro zobrazení průběžného zůstatku z kreditu a debetu, kde více zákazníků má jednotlivé zůstatky

  2. Příkaz MYSQL IN

  3. Když použiji metodu vytvoření Waterline, nevrací ID nového záznamu

  4. MariaDB přichází do města ve vašem okolí!