Използвайте coalesce()
и подзаявка
изберете id, o1, CASE WHEN o2!=o1 THEN o2 END o2, CASE WHEN o3!=o2 THEN o3 END o3 FROM( изберете id, coalesce(org1,org2,org3) o1, coalesce(org2 ,org3) o2, org3 o3 от tbl ) t
АКТУАЛИЗИРАНЕ
Предишният отговор не беше достатъчен, както R2D2 установи съвсем правилно. За съжаление не можете да правите CTEs в mysql, затова създадох изглед вместо това (разширих примера с друга колона org4
):
CREATE VIEW vert AS select id,1 n, org1 org FROM tbl where org1>'' UNION ALLselect id,2, org2 FROM tbl where org2>'' UNION ALLselect id,3, org3 FROM tbl където org3>'' UNION ALL изберете id,4, org4 ОТ tbl където org4>'';
С този изглед вече е възможно да направите следното:
ИЗБЕРЕТЕ идентификатор,(изберете org от vert, където i=id подреждане по n ограничение 1) org1,(изберете org от vert, където i=id подреждане по n ограничение 1,1) org2,(изберете org от vert където i=id подреждане по n ограничение 2,1) org3,(изберете org от vert където i=id подреждане по n ограничение 3,1) org4FROM tbl
Не е красиво, но си върши работата, вижте тук:SQLfiddle
въвеждане:
<предварителен код>| ID | org1 | org2 | org3 | org4 ||----|--------|--------|--------|--------|| 1 | HR | (нула) | Персонал | ИТ || 2 | (нула) | ИТ | Разработчик | (нула) || 3 | (нула) | (нула) | Финанси | HR |изход:
<предварителен код>| ID | org1 | org2 | org3 | org4 ||----|--------|-------|--------|--------|| 1 | HR | Персонал | ИТ | (нула) || 2 | ИТ | Разработчик | (нула) | (нула) || 3 | Финанси | HR | (нула) | (нула) |