2013-05-13 5 views
0

J'ai ces 2 requêtes SQL que j'ai besoin de rejoindre.Comment fusionner 2 requêtes en 1

Query1 (Affiche la liste des Entiries):

SELECT 
    E.EntityId 
    ,E.EntityNo 
    , E.Name 
    , E.ShortName 
FROM [xx].[xx].[Entities] E 
WHERE 
    E.Type = 'A' 
    AND E.YearEndMonth = 6 

Query2 (Affiche la liste des contacts):

SELECT P.Firstname,P.LastName, P.Email 
FROM [xxx].[xx].[People] P 
WHERE P.PeopleId= (
    SELECT TOP 1 A.PeopleId 
    FROM [xxx].[xx].[EntityAttentions] A 
    WHERE A.EntityId = ? 
    ORDER BY A.EntityAttentionTypeId ASC 
) 

Mon objectif est d'avoir une liste combinée des entités et des personnes de contact.

J'ai essayé mais avec une erreur-(Une seule expression peut être spécifiée dans la liste de sélection lorsque la sous-requête est pas introduite par exists)

SELECT 
    E.EntityId 
    ,E.EntityNo 
    , E.Name 
    , E.ShortName 
    , 
    (SELECT P.Firstname,P.LastName, P.Email 
    FROM [xxx].[xx].[People] P 
    WHERE P.PeopleId= (
     SELECT TOP 1 A.PeopleId 
     FROM [xxx].[xx].[EntityAttentions] A 
     WHERE A.EntityId = E.EntityId 
     ORDER BY A.EntityAttentionTypeId ASC 
    ) 
) 
FROM [xxx].[xx].[Entities] E 
WHERE 
    E.Type = 'A' 
    AND E.YearEndMonth = 6; 

Je suppose que je dois utiliser une sorte de JOIN mais ne Je ne sais pas exactement quoi faire. Toute aide est grandement appréciée.

Répondre

1

Essayez ceci,

SELECT 
    E.EntityId 
    ,E.EntityNo 
    , E.Name 
    , E.ShortName 
    , B.Firstname,B.LastName, B.Email 
FROM [xxx].[xx].[Entities] E 
CROSS APPLY 
( SELECT P.Firstname,P.LastName, P.Email 
     FROM [xxx].[xx].[People] P 
     WHERE P.PeopleId= 
     (
      SELECT TOP 1 A.PeopleId 
      FROM [xxx].[xx].[EntityAttentions] A 
      WHERE A.EntityId = E.EntityId 
      ORDER BY A.EntityAttentionTypeId ASC 
     ) 
) B 
WHERE 
    E.Type = 'A' 
    AND E.YearEndMonth = 6; 
+0

Yeap !!! C'est parfait! Merci – MaVRoSCy

+0

Vous êtes les bienvenus! – Maximus

1

Essayez celui -

SELECT 
    E.EntityId 
    , E.EntityNo 
    , E.Name 
    , E.ShortName 
    , P.* 
FROM [xxx].[xx].[Entities] E 
OUTER APPLY (
    SELECT P.Firstname,P.LastName, P.Email 
    FROM [xxx].[xx].[People] P 
    WHERE P.PeopleId = (
     SELECT TOP 1 A.PeopleId 
     FROM [xxx].[xx].[EntityAttentions] A 
     WHERE A.EntityId = E.EntityId 
     ORDER BY A.EntityAttentionTypeId 
    ) 
) P 
WHERE E.Type = 'A' 
    AND E.YearEndMonth = 6; 
+0

Salut, Avons-nous besoin d'utiliser ou appliquer croix appliquer extérieure? – Maximus

+0

Dans ce cas APPLICATION EXTERNE plus souhaitable d'utiliser. – Devart

+0

Cela renvoie tous les gens, je dois retourner le TOP 1 – MaVRoSCy