6 votes

SQL Sélection; Concaténation de chaînes, en évitant les double virgules lorsque les colonnes sont nulles?

J'ai les données de référence suivantes.

NOM_DE_LA_PERSONNE              RUE                      VILLE              COMTÉ            CODE_POSTAL   
------------------------------ ------------------------ ---------------- ---------------- ---------- 
David Smith                    30 Johnson Street       Norwich           Norfolk           NA38 3KL   
John Brown                     Douglas Road            Cambridge                          C8  9IJ    
Jackie White                   8 High Street           Ipswich           Suffolk           IP7  2YT   
Andrea Blue                    9 Marlborough Ave       Bury              Suffolk           IP4  0XC   
Jemima Green                   Riverside Walk          Colchester        Essex             CO6  7PR   
James Gray                     167 Hadleigh Place      London                             SW1 4TU  

Ce que je veux faire, c'est afficher une liste de noms de personnes, avec leurs adresses concaténées en une chaîne séparée par des virgules.

Cette partie est facile, j'ai utilisé || pour concaténer les colonnes et placer des séparateurs de virgules.

La partie sur laquelle je m'interroge, c'est que certaines lignes n'ont rien de répertorié pour COMTÉ, donc je dois éviter d'afficher , ,.

J'ai fait des recherches pour moi-même et j'ai décidé d'utiliser le SUBSTR dans Oracle pour remplacer les doubles virgules, cependant cela semble légèrement "sale". Y a-t-il un moyen plus propre de le faire, en évitant l'utilisation de fonctions complexes (comme cette question SO précédente) ?

Voici ce que j'ai :

SELECT
    NOM_DU_FOURNISSEUR as "Nom du fournisseur",
    REPLACE(RUE || ', ' || VILLE || ', ' || COMTÉ || ', ' || CODE_POSTAL, ' ,','') as "Adresse du fournisseur"
FROM
    FOURNISSEURS
;

Merci

9voto

Yahia Points 49011

Essayer

SELECT
SUPPNAME AS "Nom du fournisseur",
(
CASE WHEN STREET IS NULL THEN '' ELSE STREET || ', ' END || 
CASE WHEN TOWN IS NULL THEN '' ELSE TOWN || ', ' END ||
CASE WHEN COUNTY IS NULL THEN '' ELSE COUNTY || ', ' END || 
CASE WHEN POSTCODE IS NULL THEN '' ELSE POSTCODE END
) AS "Adresse du fournisseur"
FROM SUPPLIERS

5voto

alexeionin Points 331

Dans les réponses précédentes, si tous les champs sont NULL, vous obtiendrez seulement stupide ', ' au lieu de NULL attendu. Essayez cette approche pour supprimer un ', ' supplémentaire au début du résultat

SELECT
SUPPNAME AS "Nom du Fournisseur",
SUBSTR(
    NVL2(STREET, ', ' || STREET, NULL)
        || NVL2(TOWN, ', ' || TOWN, NULL)
        || NVL2(COUNTY, ', ' || COUNTY, NULL)
        || NVL2(POSTCODE, ', ' || POSTCODE, NULL)
    ,2) AS "Adresse du Fournisseur"
FROM SUPPLIERS

3voto

SGB Points 586

Vous pourriez utiliser NVL2 autour des champs qui pourraient être nuls, quelque chose comme NVL2(county, county || ',', '')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X