助けてください - 私は難しい質問ではないはずのことを言います。 私はSQL Server 2012を使用しており、電子メールアドレスで顧客をリストしたいと考えています。内的結合のトップ1は、結果が期待できません
私は、デフォルトの電子メールアドレスとその人の電子メールアドレスを含む連絡先テーブルを含むCustomerテーブルを持っています。各顧客は複数の連絡先を持つことができます。連絡先は複数の目的に使用でき、目的ごとにContactDocumentOptionテーブルにエントリがあります。私はpurposetype = 102
を持つ連絡先にのみ興味があります。カスタマーごとに、タイプ102の連絡先のメールアドレスを表示したいと思います。タイプ102の連絡先がない場合は、顧客のデフォルトのメールアドレスを表示します。顧客は二つの接点を有し、第1の型102でない場合、その顧客のための最初の接触であることを起こる場合を除き
次のクエリdoesntのは、連絡先の電子メールを取得し、その後、連絡先の電子メールは
SELECT C.Code as Customer
, C.Name as CustomerName
, C.Email
, CC.Email
, ISNULL(CC.Email, C.Email) as Email
FROM [dr].[Customer] C
LEFT OUTER JOIN
(
Select TOP 1 CDO.ContactId
, CustomerId
, Email
from dr.Contact CC
INNER JOIN dr.ContactDocumentOption CDO on CDO.ContactId = CC.ContactId
where CDO.TransactionTypeId = 102
Order by Email
) CC on CC.CustomerId = C.CustomerId
nullです
これは、トップ1が102ということを確認する前にトップのコンタクトを取得したため、私は次のようにクエリを変更したが、同じ結果が得られたと考えている。
SELECT C.Code as Customer
, C.Name as CustomerName
, C.Email
, CC.Email
, ISNULL(CC.Email, C.Email) as Email
FROM [dr].[Customer] C
LEFT OUTER JOIN
(
SELECT CustomerId
, CT.ContactId
, Email
from dr.Contact CT
INNER JOIN
(
Select TOP 1 ContactId from dr.ContactDocumentOption
where TransactionTypeId = 102
) CDO on CDO.ContactId = CT.ContactId
) CC on CC.CustomerId = C.CustomerId
私は以前の投稿から助けを受けましたが、うまくいかなかったので、さらなる助けを求めています。ありがとうございました。
SELECT TOP 1は、結果セットをクエリによって返される最初のレコードに限定します。 –
クエリで空白を使用するのは怖いことではありません。それらのことが私の目を傷つけました。 –
いくつかの同じデータと望ましい出力は、あなたがしようとしていることを理解するために長い道のりになります。ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –