J'utilise Oracle SQL et j'ai une table de produits avec différents attributs et volume de vente pour chaque produit et une autre table avec certaines règles d'exclusion pour différents niveaux d'agrégation. Regardons l'exemple: p>
Voici notre table principale avec les données de vente sur lesquelles nous souhaitons effectuer des calculs: p>
et l'autre table contient des règles différentes qui sont censées exclure certaines lignes de la table ci-dessus: P>
Quand il y a un "X", cette colonne ne devrait pas être considérée comme nos règles: 1. Exclure toutes les lignes avec attr_3 = 'non' 2. Exlcule toutes les lignes avec attr_1 = 'Europe' et attr_2 = 'Snacks' et attr_3 = 'Non' 3. Exlcule toutes les lignes avec attr_1 = 'Africa' p>
et sur la base de ce que notre sortie finale devrait être comme celle-ci: p>
Comment cela pourrait être exercé dans SQL? Je pensais à rejoindre mais je ne sais pas comment gérer différents niveaux d'agrégation d'exclusions. P>
4 Réponses :
Vous pouvez utiliser où je considérais les valeurs à la place. P> Démo KBD> P> P> P> n'existe pas code> x code> dans les attributs CODE> TABLE AS NULL code>. Si vous avez vraiment X code>, vous pouvez utiliser em>: p>
Vous pouvez utiliser la jointure à l'aide de la case .. Lorsque CODE> Énoncé comme suit: SELECT P.*
FROM PRODUCT P
JOIN RULESS R ON
(R.ATTR_1 ='X' OR P.ATTR_1 <> R.ATTR_1)
AND (R.ATTR_2 ='X' OR P.ATTR_2 <> R.ATTR_2)
AND (R.ATTR_3 ='X' OR P.ATTR_3 <> R.ATTR_3)
i pense em> votre sortie attendue est fausse. Aucune des règles ne exclut la deuxième rangée (Europe - Snacks - Oui).
Je ferais cela avec trois en particulier, cela peut tirer parti des index sur différent n'existe pas code>: (attr_1) code >, (attri_2) code> et (attr_3) code> - quelque chose qui est assez pratique si vous avez un nombre modéré de règles. P> P>
Veuillez expliquer la logique d'exclusion plus attentivement ici, car ce n'est pas clair pour moi.
Je pense que la ligne
16543 EUROPE Snacks Oui 23546 Code> est absent dans le jeu de résultats