1
votes

SQL: Comment joindre deux colonnes de manière spécifique?

Je travaille avec une base de données Oracle et je suis nouveau dans SQL en général.

J'ai un tableau avec des données et des colonnes de mois. Après avoir filtré les données, il ne me reste plus que quelques lignes. Mais je veux obtenir deux colonnes: 1-ère colonne avec 12 mois répertoriés (1,2,3,4,5,6,7,8,9,10,11,12) et deuxième colonne avec les valeurs des données d'origine ( s'il existe) ou des zéros.

Fe: Données d'origine:

MONTH     VALUE
  1         0
  2         0
  3         0
  4         0
  5         0
  6         0
  7         0
  8         0
  9         96
  10        0
  11        0
  12        0

Ce que je veux:

MONTH     VALUE
  9        96

J'ai déjà essayé d'utiliser toutes les fonctions de jointure et union, mais cela n'a pas fonctionné.


0 commentaires

3 Réponses :


0
votes

est-ce ce que vous recherchez?

WITH tab AS(SELECT LEVEL AS m , null as value  FROM DUAL CONNECT BY LEVEL <= 12)
, tab2 AS(SELECT 9 as m, 96 as VALUE FROM DUAL)

select t1.m
      ,coalesce(t2.value,0) as value
from tab t1
left join tab2 t2 on t1.m = t2.m
order by 1


0 commentaires

1
votes

Commencez par générer une séquence de 12 mois, puis utilisez la jointure gauche

select monthNo, coalesce(Value,0) as value from
(
SELECT 1 MonthNo
         FROM   dual
         CONNECT BY LEVEL <= 12
)A left join originaltable b on A.monthNo=b.month


0 commentaires

-1
votes

Bro, apprécie ...

select months.month ,original_data.VALUE 
from original_data
Right JOIN (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) months(month) on
months.month = original_data.MONTH

order by months.month --optional 


7 commentaires

L'idée est vraiment bonne. Merci. Mais je reçois un message d'erreur: ORA-00903: nom de table non valide


Je suppose que cela a quelque chose à voir avec des mois.


Cette syntaxe testée sur MSSQL. Quel SQL utilisez-vous?


Je pense qu'il doit être converti en syntaxe d'Oracle.


J'utilise Oracle SQL


Pouvez-vous publier une erreur complète. L'idée est vraiment bonne. Merci. Mais j'obtiens un message d'erreur: ORA-00903: nom de table invalide ...?


OK, maintenant j'ai fini. Le problème était avec une syntaxe. Pour créer une liste de valeurs dans Oracle SQL, vous devez utiliser quelque chose comme ceci: table (sys.odcinumberlist (1,2,3,4,5,6,7,8,9,10,11,12)) monate. Ensuite, je connecte ma table de données avec la liste de valeurs créée (1-12 pour "Mois" et null pour "Valeurs") en utilisant la fonction UNION ALL.