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é.
3 Réponses :
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
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
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
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.