J'ai une table dans MySQL comme ci-dessous,

Screenshot

Maintenant, je veux obtenir une sortie comme ci-dessous,

id |username |accessLevel
============================ 
6  |deepaku8 |arch[ALL]
7  |kirajama |arch[ALL]- geo[APJ]
8  |asau     |arch[Data Center]- geo[EMEAR_REGION]

Existe-t-il un moyen d'obtenir ce résultat par requête SQL ?

-1
Anijit Sau 20 avril 2017 à 16:24

3 réponses

Meilleure réponse

Cela fait les bases pour votre table (deviner les colonnes que vous voulez)

SELECT id,
        username,
        CONCAT_WS(' - ', 
            IF(arch IS NULL OR arch = '', NULL, CONCAT('arch', '[', arch, ']')),
            IF(geo IS NULL OR geo = '', NULL, CONCAT('geo', '[', geo, ']')),
            IF(theater IS NULL OR theater = '', NULL, CONCAT('theater', '[', theater, ']')),
            IF(operation IS NULL OR operation = '', NULL, CONCAT('operation', '[', operation, ']')),
            IF(region IS NULL OR region = '', NULL, CONCAT('region', '[', region, ']')),
            IF(country IS NULL OR country = '', NULL, CONCAT('country', '[', country, ']')),
            IF(technology IS NULL OR technology = '', NULL, CONCAT('technology', '[', technology, ']')),
            IF(subTechnology IS NULL OR subTechnology = '', NULL, CONCAT('subTechnology', '[', subTechnology, ']'))
        ) AS accessLevel
FROM some_table
1
Kickstart 20 avril 2017 à 13:34

Vous interrogez en SQL à l'aide de l'instruction SELECT. Les commandes SQL sont implémentées sous forme de chaînes de commandes SQL. Voici un bon tutoriel de Microsoft .

0
Torben 20 avril 2017 à 13:34

Vous pouvez utiliser concat_ws pour ce faire. concat renvoie null si l'une des valeurs est null et concat_ws ignore les valeurs null lors de la concaténation.

select id,username,
concat_ws('-',concat('arch','[',if(arch='',null,arch),']'),
              concat('geo','[',if(geo='',null,geo),']'), 
              concat('technology','[',if(technology='',null,technology),']')
           --add more values as required
         )
from tablename
0
Vamsi Prabhala 20 avril 2017 à 13:46