Je veux écrire une requête pour ajouter une nouvelle colonne s'il y a des données dans l'une des colonnes du nom du score s'il n'y a pas de données pour certaines de ses lignes dans le tableau, la requête doit créer une colonne et afficher " no "mais s'il y a des données là-dedans, il devrait afficher" oui "comme ci-dessous.
Tableau
Name Phone Score new_column Ali 1111 90 yes Karim 2222 80 yes Ramin 33333 10 yes Millad 3333 no Rawof 5555 no
Après la requête, il devrait afficher
Name Phone Score Ali 1111 90 Karim 2222 80 Ramin 33333 10 Millad 3333 Rawof 5555
4 Réponses :
Vous pouvez essayer d'utiliser CASE WHEN avec la fonction de fusion.
SELECT t1.*,(CASE WHEN t1.Score IS NOT NULL THEN 'yes' else 'no' end) as new_column FROM T t1
Modifier
Dans le document Oracle sur NULL
Oracle Database traite une valeur de caractère avec une longueur de zéro comme nulle.
SELECT *,CASE WHEN coalesce(Score,'') <> '' THEN 'yes' else 'no' end 'new_column' FROM T
me battre de 30 secondes
lorsque j'essaie cela dans la section de commande oracle apex SQL, il lance une erreur ORA-00923: mot clé FROM non trouvé à l'endroit prévu
@MelladQarizada Vous pouvez essayer d'utiliser le nom de votre table au lieu de T
Vous devrez préfixer *
, par exemple t. *
.
Cependant, <> ''
ne sera jamais vrai s'il s'agit d'Oracle. De plus, Oracle n'a pas besoin de crochets autour des expressions de la liste de sélection, et les guillemets doubles forcent simplement le nom de la colonne en minuscules (bien que ce soit peut-être ce que l'OP voulait).
@WilliamRobertson Merci pour votre rappel que je modifie ma réponse :)
Vous pouvez essayer d'utiliser CASE WHEN
Expression
select name, phone, score, case when score is null or score='' then 'no' else 'yes' end from tablename
@MelladQarizada, si cela vous a aidé, veuillez le marquer comme réponse acceptée :)
DECLARE @table AS TABLE ( [Name] VARCHAR(32), Phone VARCHAR(16), Score int ) INSERT INTO @table VALUES ('Ali', '1111', 90), ('Karim', '2222', 80), ('Ramin', '33333', 10), ('Millad', '3333', NULL ), ('Rawof', '5555', NULL) SELECT [Name], Phone, CASE WHEN SCORE IS NULL THEN 'no' ELSE 'yes' END as new_column FROM @table
Vous pouvez utiliser case
, nvl2
ou decode
.
create table demo (name, phone, score) as select 'Ali', 1111, 90 from dual union all select 'Karim', 2222, 80 from dual union all select 'Ramin', 33333, 10 from dual union all select 'Millad', 3333, null from dual union all select 'Rawof', 5555, null from dual; alter table demo add new_column generated always as (case when score is null then 'no' else 'yes' end); select * from demo; NAME PHONE SCORE NEW_COLUMN ------------------------------ ---------- ---------- ---------- Ali 1111 90 yes Karim 2222 80 yes Ramin 33333 10 yes Millad 3333 no Rawof 5555 no 5 rows selected.
nvl2 code> est le plus compact, mais c'est un peu cryptique. Je choisirais probablement moi-même
case
.
Si vous voulez que cette expression soit disponible en permanence, vous pouvez en faire une colonne virtuelle:
select name, phone, score , case when score is null then 'no' else 'yes' end as new_column1 , nvl2(score,'yes','no') as new_column1 , decode(score, null,'no', 'yes') as new_column3 from demo;
Puis-je vous demander pourquoi vous voulez faire cela? En général, cela me semble être une mauvaise idée car alors vous aurez deux sources de vérité pour cette propriété, maintenant lorsque vous mettez à jour une ligne, vous devez (vraisemblablement) vous assurer que new_column continue d'être correcte.