2013-05-13 118 views
0

我有這2個SQL查詢需要加入。如何在1中合併2個查詢

查詢1(顯示Entiries名單):

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

QUERY2(顯示聯繫人的列表):

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 
) 

我的目標是讓實體和聯繫的人的組合列表。

我試過,但有一個有錯誤

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; 

我想我必須使用某種類型的(只有一個表達式可以在選擇列表時,子查詢不與EXISTS引入指定)加入,但不要我不知道該怎麼做。 任何幫助,不勝感激。

回答

1

試試這個,

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 !!!那很完美!謝謝 – MaVRoSCy 2013-05-13 07:04:26

+0

不客氣! – Maximus 2013-05-13 07:07:53

1

嘗試這一個 -

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

嗨,我們是否需要使用跨應用或外申請? – Maximus 2013-05-13 06:58:59

+0

在這種情況下,OUTER APPLY更適合使用。 – Devart 2013-05-13 07:01:04

+0

這將返回所有People,我需要返回頂部1 – MaVRoSCy 2013-05-13 07:02:51