0
votes

Valeurs de carte dans la colonne aux valeurs de SQL

Je veux remplacer certaines valeurs avec des valeurs correspondantes dans SQL. Je ne peux pas créer une table de référence croisée. Les valeurs peuvent être spécifiées dans le fichier 'txt' ou "propriétés" dans mon application

i examinée par déclaration mais j'ai 200 remplacements pour faire pour lequel case est pas suffisant xxx

dans ma réponse si je reçois lot_number Je veux le remplacer par numéro de lot ou si je reçois lot_number_xref Je veux le remplacer par Numéro de lot croisé-référence xxx

à remplacer par < Pré> xxx


5 commentaires

Donnez-nous des données de table d'échantillons et le résultat attendu - tout comme texte formaté, pas des images. Simplifier! Stackoverflow.com/help/mcve


Créez une table de référence croisée avec des colonnes pour les valeurs anciennes et nouvelles, puis rejoignez-la.


@Ricbrandt - Je ne peux pas créer de table de référence croisée. Les valeurs peuvent être spécifiées dans le fichier 'txt' ou «propriétés» dans mon application. Je viens d'ajouter des informations sur les questions.


@ RAJ247: Créez ensuite une table et remplissez-la avec les valeurs des fichiers.


Pourquoi devrais-je fournir un mcve pour ce qui me semble être une requête SQL très simple?


3 Réponses :


2
votes

Si vous avez de nombreuses valeurs différentes à remplacer, vous devez créer une table pour stocker la cartographie des anciennes valeurs vers de nouvelles valeurs. Ensuite, vous pouvez rejoindre cette table dans votre requête.

Le SQL ci-dessous remplace l'ancienne valeur avec la nouvelle valeur (ou la laisse comme si aucune traduction n'a été définie): p> xxx pré>

pour un nombre limité de valeurs à traduire Vous pouvez étudier. Ou peut-être un CTE avec Union: P>

WITH mapping_table AS (
    SELECT 'LOT_NUMBER' AS old_value, 'Lot Number' AS new_value
    SELECT 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value


0 commentaires

1
votes

Si vous ne pouvez pas utiliser la table de référence croisée, utilisez-le (vous devrez le générer dans votre application) Sous-requête ou CTE à la place! CTE:

select 
 t.value,
 coalesce(m.new_value, 'none') as new_value
from tbl_your_table t
left join (
 select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
 union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
) m on t.value = m.old_value


0 commentaires

1
votes

Si vous avez quelque chose de générique comme _ charecteur, ce que vous pouvez faire est d'utiliser comme Opérateur et xxx

puis, utilisez < code> cas lorsque en haut de ceci avec manneule in (x, ref) puis remplacer (mannequin, 'x', croix) de même pour les autres comme Eh bien, cela réduira le nombre de cas.

Le truc est simplement de vérifier les termes généralisés et de leurs remplacements Store IT dans la clause Préfiltrer les plus généraux. Si le compte est toujours important, vous avez besoin d'une table temporaire pour référence de recherche comme une matrice dans d'autres langages de programmation


0 commentaires