0

参加する必要があるこれらの 2 つの SQL クエリがあります。

Query1 (エントリのリストを表示):

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

クエリ 2 (連絡先のリストを表示):

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
)

私の目的は、エンティティと連絡先のリストを組み合わせることです。

やってみましたがエラーあり(EXISTSで副問合せを導入しないと選択リストに指定できる式は1つだけ)

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;

ある種のJOINを使用する必要があると思いますが、何をすべきか正確にはわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

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;
于 2013-05-13T06:57:53.713 に答える
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;
于 2013-05-13T06:54:54.780 に答える