2010-12-06 4 views
1

Excuses si le titre est confus. Essentiellement, nous avons un ensemble de tables hiérarchiques de catégories, de regroupements, de collections, etc. avec des éléments individuels au bas de la hiérarchie.Requête SQL pour retourner une catégorie si des sous-éléments existent ET 'autre nom' s'il existe des sous-éléments avec la catégorie

Donc, dans l'ensemble, nous avons quelque chose comme Catégorie> Regroupement> Collection> Article. Cependant, certains articles ne font pas partie d'une collection. Ce dont j'ai besoin est une requête qui retournera les détails de collection si au moins un article existe dans la collection pour des termes de recherche donnés, et "Autre" (une valeur de drapeau ou quelque chose) si des articles existent dans la catégorie et le groupement, mais ne sont pas une collection (la clé étrangère 'collection_id' sera null dans ce cas).

Le résultat que je suis en train de réaliser est quelque chose comme:

Collection Name 1 
    Item 
    Item 
    ... 
Collection Name 2 
    Item 
    Item 
    ... 
Collection Name X 
    Item 
    ... 
Other Items 
    Item 
    Item 
    ... 

Est-il possible (et assez simple) de le faire avec une seule requête?

+3

Pouvez-vous donner une structure de table partielle? Il existe plusieurs façons d'implémenter des données hiérarchiques. – NotMe

+0

Malheureusement, je n'ai pas la structure devant moi - j'allais poster ce que je crois que c'est, mais je ne peux pas être sûr de l'exactitude jusqu'à demain. C'est une hiérarchie assez simple cependant avec chaque table ayant un PK, et un FK à la table directement ci-dessous dans la structure à l'exception des éléments qui ont des liens FK aux 3 tables au-dessus dans la hiérarchie. S'il n'y a pas de réponse, je mettrai à jour le PO avec un échantillon de structure demain matin. – thor

Répondre

0

Cela ne va pas formater les données comme vous l'avez indiqué, mais il semble que quelque chose le long des lignes de SELECT CASE WHEN CollectionID IS NULL THEN 'Other Items' ELSE CollectionName END, ItemName ferait l'affaire. Je suis un gars SQL Server surtout, mais je pense que c'est assez standard SQL.

Questions connexes