0
votes

Obtenez une gamme de colonnes avec une valeur spécifique à Oracle

Je ne savais pas comment titter cette question, mais j'ai une table Oracle qui a une colonne pour chaque jour de la semaine. Celles-ci représentent les jours où une entreprise est ouverte. Les valeurs de ces colonnes sont soit «y» ou «n». C'est ainsi que la table a été configurée il y a des années et je suis incapable de le changer.

ID  |     DAYS_OPEN
1      MONDAY - FRIDAY
2      TUESDAY - SATURDAY


2 commentaires

Toutes les combinaisons sont possibles? Je veux dire que les jours ouverts peuvent-ils être du jeudi à lundi, par exemple et ce qui devrait être le résultat dans ce cas? Jeudi - lundi? Le résultat peut également être divisé en deux ou plusieurs périodes telles que lundi, mercredi et vendredi-samedi?


@Dornaut Oui, toutes les combinaisons sont possibles, bien que la majorité soit le lundi au vendredi et au lundi - dimanche. Cette table contient également une colonne pour chaque mois que je devrai appliquer une logique similaire à celle-ci. Je pensais juste que je commencerais avec le scénario plus facile.


3 Réponses :


0
votes

Eh bien, vous avez les données dans un format moche. Vous pouvez utiliser un cas géant Expression: xxx

Il n'y a que 2 ^ 7 = 128 combinaisons possibles, c'est donc réellement possible avec un cas géant < / code>. Vous pouvez également mettre les valeurs dans une table de référence et y participer à cela.


2 commentaires

Je conviens que les données sont dans un format moche. Je n'avais pas examiné une déclaration de cas pour chaque possibilité, et ce serait une déclaration de cas géante à coup sûr. Malheureusement, cette même table a une colonne pour chaque mois que je devrai appliquer une logique similaire pour obtenir une variété de mois. J'espérais qu'il y avait un moyen plus simple de le faire que je ne pense juste pas à.


@DSTNRGRS. . . Je ne suis pas sûr que la méthode "plus simple" soit en réalité plus simple. Je suggérerais une table de référence.



0
votes
  1. Tout d'abord, vous devez transformer vos données à l'aide de Pivot: xxx

    résultat: xxx

    1. Vous pouvez ensuite filtrer des jours qui ont «Y» dans la colonne VAL et les agrégent: xxx

      résultat: xxx

      1. et la dernière étape consiste à agréger toutes les valeurs par ID: xxx

        résultat: xxx


1 commentaires

Cela semble prometteur. Je vais essayer d'envelopper ma tête autour de cela. Je vous ferai savoir si cela fonctionne pour moi. Merci.



1
votes

trouvé solution plus facile: xxx

Exemple complet: xxx

résultat: xxx

EDIT: Élargir sur la réponse originale Pour appliquer le même processus aux mois de l'année. Je devais envelopper le numéro de mois entre crochets dans le décodage. Ensuite, dans le Regexp_replace, j'ai spécifié une liste non correspondante (période et espace).

Voici l'exemple complet: xxx

et les résultats: < / p> xxx


5 commentaires

Les deux solutions fonctionnent, mais cela peut facilement être ajouté à une requête existante, donc je vais avec cet itinéraire. Je peux aussi facilement adapter cela pour trouver les mois d'activité aussi. Merci de votre aide.


Pouvez-vous suggérer comment changer le motif Regexp_replace pour effectuer ce même processus lorsque vous avez des valeurs à double chiffre (numéros mois)? Le modèle actuel se divise sur les premiers et derniers chiffres adjacents, mais lorsque je change cela de la semaine de la semaine à des mois, puis d'octobre à décembre sont des numéros de mois à double chiffre.


@DSTNRGRS Les mois de 2 chiffres seraient beaucoup plus faciles, c'est-à-dire 01-12


@DSTNRGRS J'ai simplifié votre requête - s'il vous plaît vérifier.


Les mois à deux chiffres font autant plus de sens. Merci