2013-05-13 110 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