Salutations,Instruction SELECT imbriquée dans une expression CASE
Voici mon problème.
J'ai besoin d'obtenir des données de plusieurs lignes et de les renvoyer comme résultat unique dans une requête plus grande.
J'ai déjà posté une question similaire ici. Return multiple values in one column within a main query mais je soupçonne que mon manque de connaissance de SQL a rendu la question trop vague parce que les réponses n'ont pas fonctionné. J'utilise Microsoft SQL 2005.
Voici ce que j'ai.
Plusieurs tables avec CaseID comme PK, CaseID est unique.
Une table (tblKIN) avec CaseID et ItemNum (AutoInc) comme PK combinée.
Parce que chaque personne de la base de données aura probablement plus d'un parent.
Si j'exécute ce qui suit, dans une fenêtre de requête SQL, cela fonctionne.
DECLARE @KINList varchar(1000)
SELECT @KINList = coalesce(@KINList + ', ','') + KINRel from tblKIN
WHERE CaseID = 'xxx' and Address = 'yyy'
ORDER BY KINRel
SELECT @KINList
Ceci retournera la relation de toutes les personnes qui vivent à la même adresse. les résultats ressemblent à ceci ...
Père, Nièce, Sœur, Fils
Maintenant, le problème pour moi est de savoir comment l'ajouter à ma requête principale?
Raccourcie aux informations pertinentes, la requête principale ressemble à ceci.
SELECT DISTINCT
c.CaseID,
c.Name,
c.Address,
Relatives=CASE WHEN exists(select k.CaseID from tblKIN k where c.CaseID = k.CaseID)
THEN DECLARE @KINList varchar(1000)
SELECT @KINList = coalesce(@KINList + ', ','') + KINRel from tblKIN
WHERE CaseID = 'xxx' and Address = 'yyy'
ORDER BY KINRel
SELECT @KINList
ELSE ''
END
FROM tblCase c
ORDER BY c.CaseID
Les erreurs que je reçois sont.
Serveur: Msg 156, niveau 15, état 1, ligne 13
Syntaxe incorrecte près du mot clé 'DECLARE'.
Serveur: Msg 156, niveau 15, état 1, ligne 18
Syntaxe incorrecte à proximité du mot clé 'ELSE'.
J'ai essayé d'imbriquer les parenthèses entre DECLARE et la fin de SELECT @KINList.
J'ai essayé d'ajouter un BEGIN et END à la section THEN de l'instruction CASE.
Aucun travail.
Les données de la table source ressemblent à ceci. (périodes ajoutées pour une meilleure lisibilité)
tblCase
CaseID Nom Adresse
10-001 Jim ...... 100 Main St.
10-002 Tom .... 150 Elm St.
10-003 Abe ..... 200 1st St.
tblKIN
CaseID ItemNum Nom Relation Adresse
10-001 00001 Steve ... Son ........ 100 Main St.
10-002 00002 James..Father .... 150 Elm St.
10-002 00003 Betty .... Nièce ...... 150 Elm St.
10-002 00004 Greta ... Soeur ..... 150 Elm St.
10-002 00005 Davey..Son ........ 150 Elm St.
10-003 00006 Edgar ... Frère ... 200 1st St.Si j'exécute la requête pour CaseID = 10-002, il doit retourner ce qui suit:
CaseID Nom Adresse ....... parents
10-002 Tom ... 150 Elm St. ..Father, Nièce, Soeur, Fils
Je suis sûr que cela est probablement une solution simple, mais Je ne sais pas comment le faire.
Merci pour votre temps, et je m'excuse pour la longueur de la question, mais je voulais être clair.
Merci !!!
ont parfaitement fonctionné !!!!!! Merci !!!!! – Scottster