Comment ne pas afficher les colonnes qui sont NULS en vue
J'ai mis en place un point de vue qui combine toutes les données sur plusieurs tables. Est-il un moyen d'écrire cette sorte que seules les colonnes qui contiennent les données non nulles sont affichés, et les colonnes qui contiennent des valeurs NULL ne sont pas inclus?
AJOUTÉ:
Désolé, encore à étudier et à travailler sur mon premier grand projet de sorte que chaque jour semble être une nouvelle expérience à la minute. Je n'ai pas été très clair, et c'est en partie parce que je ne suis pas sûr que je vais aller sur les choses de la bonne façon! Le client est une bibliothèque universitaire, et la base de données enregistre les détails de collections particulières. Le point de vue que j'ai mentionné est pour afficher toutes les données détenues sur un élément, de sorte qu'il est en train de réunir des tableaux sur la publication, copie, l'auteur, l'éditeur, la langue et ainsi de suite. Un petit nombre d'éléments de la collection sont des papiers, afin d'avoir des détails supplémentaires sur et au-dessus de la norme bibliographique de détails. Ce que je ne voulais pas été à un utilisateur d'obtenir tous les champs vides relatives aux papiers si ce qui a été renvoyé uniquement constitués de livres, donc le papier les champs de la table étaient tous nuls. Alors j'ai pensé que peut-être il y aurait un moyen de ne pas montrer ces. Quelqu'un a fait remarquer que c'est le travail de l'application client plutôt que la base de données elle-même, afin que je puisse quitter ce jusqu'à ce que j'arrive à cette phase du projet.
Donc, si la colonne A de l'enregistrement 1 a une valeur, mais d'enregistrer 2 de la colonne A la valeur NULL si la colonne visibles dans la vue?
Cela semble logique qui devrait être dans l'interface graphique, pas de la base de données. Ce ne serait pas respecter une bonne base de données de récupération de contrat, comme la mise en page peuvent changer à tout moment.
Je pense qu'elle essaie de faire est de supprimer les colonnes inutiles.
OriginalL'auteur Michelle | 2010-05-24
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucun moyen de le faire en sql.
Ne pouvez pas utiliser l'une de ces techniques en vue.
110% de réponses correctes. SQL = colonne fixe de sortie.
OriginalL'auteur Amy B
Dans votre définition de la vue, vous pouvez inclure les cas OÙ les conditions qui peuvent exclure les lignes qui ont certaines colonnes sont NULLES.
Mise à jour: vous ne pouvez pas vraiment filtrer colonnes - vous définir la liste des colonnes qui font partie de votre point de vue dans votre définition de la vue, et cette liste est fixe et ne peut pas être changé dynamiquement......
Ce que vous pourriez être en mesure de faire est de nous
ISNULL(column, '')
construire pour remplacer les valeurs Null avec une chaîne vide. Ou alors vous avez besoin pour gérer l'exclusion de ceux colonnes dans votre affichage frontal - pas dans la définition de la vue SQL...La seule chose que je vois que vous pourriez faire est de vous assurer de ne sélectionner que les colonnes de la vue qui vous savez ne sont pas NULLES:
et ainsi de suite - mais il n'y a pas de simple ou de solution magique pour sélectionner toutes les colonnes qui ne sont pas NULL dans une instruction SELECT...
Cela permettra de filtrer les lignes contenant des valeurs null dans certaines colonnes, ce qui est légèrement différent de ce que je crois que l'affiche est après.
Une étrange demande - mais vous les gars semblent être de droite.... hmm... peut pas penser à une façon de le faire..... au moins pas sur le SQL.... ou peut-être que c'est juste un mauvais choix de mots et de l'OP veut vraiment éliminer les lignes? Je ne sais pas pour sûr....
OriginalL'auteur marc_s
Vous ne pouvez pas faire cela dans une vue, mais vous pouvez le faire assez facilement à l'aide de SQL dynamique dans une procédure stockée.
Bien sûr, avoir un schéma qui se déplace n'est pas nécessairement bon pour les clients qui consomment de la data, mais il peut être efficace que si vous avez très peu de données ET de la consommation le client comprend la variation de schéma.
Si vous avez un point de vue, vous pouvez mettre un "en-tête" ligne de votre point de vue que vous pouvez inspecter côté client sur la première ligne dans la boucle pour voir si vous voulez ne pas s'embêter avec la colonne de la grille ou que ce soit, vous pouvez faire quelque chose comme ceci:
Je pense que la réponse a été très clair: dans une procédure stockée, vous pouvez varier les colonnes retournées à l'aide de SQL dynamique. Dans le deuxième cas, j'ai donné un exemple solide de mettre une ligne de résumé sur la première ligne dans le jeu de résultats indiquant si la colonne a de données et de mettre une valeur NULL si le COMTE était de 0. Consommer que du côté client et la suppression de colonnes, il devrait être assez simple.
OriginalL'auteur Cade Roux
Si nous sommes à la lecture de votre question, il n'y a pas un moyen de le faire en SQL. La sortie d'un point de vue doit être un rapport (sur-)termes simples, il doit être de forme rectangulaire. C'est, chaque ligne doit avoir le même nombre de colonnes.
Si vous pouvez nous en dire plus au sujet de vos données et nous donner une idée de ce que vous voulez faire avec la sortie, nous pouvons peut-être offrir plus de suggestions positives.
OriginalL'auteur AakashM
En général, d'ajouter une clause where à votre requête, par exemple
Ici, a, b, c sont vos noms de colonne.
Si vous vous joignez à des tableaux potentiellement NULL colonnes, puis utiliser une JOINTURE INTERNE, et les valeurs NULL ne sera pas inclus.
EDIT: j'ai peut-être mal compris - le au-dessus des filtres de lignes, mais vous pouvez peut-être demander à filtrer les colonnes, par exemple, vous avez plusieurs colonnes et que vous ne voulez afficher que les colonnes qui contiennent au moins une valeur null dans toutes les lignes sont de retour. À l'aide de SQL dynamique offre une solution, car l'ensemble des colonnes varie en fonction de vos données.
Voici une requête SQL qui crée une autre requête SQL contenant les colonnes appropriées. Vous pouvez exécuter cette requête, et le soumettre ensuite du résultat d'une autre requête. Il suppose 'pk' est la colonne qui est toujours non nulle, par exemple une clé primaire - ce qui signifie que nous pouvons préfixe de ligne supplémentaire noms avec une virgule.
La requête fonctionne à l'aide de Count(colonne) - la fonction d'agrégation ignore les valeurs NULL, et donc renvoie 0 pour une colonne composée entièrement de la valeur Null. Le générateur de requête suppose que YourQuery utilise des alias pour s'assurer il n'y pas de doublons de noms de colonne.
Alors que vous ne pouvez pas mettre cela dans une vue, vous pouvez l'envelopper comme une procédure stockée qui copie les données d'une autre table - la table de résultat. Vous pouvez également configurer un déclencheur pour que le résultat de la table est mis à jour chaque fois que les tables de base de changement.
OriginalL'auteur mdma
Je soupçonne ce qui se passe, c'est que l'utilisateur final est en cours d'exécution CrystalReports et de se plaindre de toutes les colonnes vides qui doivent être supprimés manuellement.
Il serait possible de créer une procédure stockée qui permettrait de créer une vue à la volée, laissant dataless colonnes. Mais alors, vous devez exécuter cette proc avant l'utilisation de la vue.
Est acceptable?
OriginalL'auteur egrunin