2017-02-02 4 views
0

私は、以下のコードに従って顧客の詳細のレポートを作成する必要があります。私の追加の要件は、私の電子メールIDに1つ以上の値が含まれている場合、新しいレコードを持つことによってレポートを作成することです。それは私の電子メールIDは、私は別の行に分割したい複数の値を持つている 交差適用を使用すると副問合せが1行以上返されました

select distinct c.PKEY [Customer Code], 
c.NAME [Customer Name], 
mi.MODEL [Machine #], 
(select Split.a.value('.','varchar(100)') email 
from 
    (select  
     cast('<x>' + replace(m.CONTACT_EMAIL,';','</x><x>')+'</x>' as XML) as x 
    from tblMachineContact m 
    where mi.PKEY=m.MAC_PKEY and m.CONTACT_CATEGORY_PKEY in ('PC'))t 
cross apply x.nodes ('/x') as Split(a)) [Customer Email] 
from tblMachine mi 
inner join tblCustomers on m.CUST_PKEY=c.PKEY 
where mi.STATUS='A' 

ので、

C000279 Cust1  [email protected] 
C000279 Cust1  [email protected] 

私のコードは次のようである、このようにする必要があります。しかし、私のサブクエリはこれにより1行以上を返し、エラーを引き起こしています。これを達成するための解決策はありますか?

@Gordon、 もう1つ条件を使用しています。しかし、カテゴリ= PCの外部からのこの電子メールIDは、すべてのカテゴリに適用されています。私はそれをPCカテゴリーの私の記録に適用したいだけです。どうすれば達成できますか?以下は

私は、コードのすべてのニュアンスに従っていませんが、あなたの代わりに相関サブクエリのouter applyを使用している場合、これは動作するはずです、

select distinct c.PKEY [Customer Code], 
c.NAME [Customer Name], 
mi.MODEL [Machine #], 
(select Split.a.value('.','varchar(100)') email 
from 
    (select  
     cast('<x>' + replace(m.CONTACT_EMAIL,';','</x><x>')+'</x>' as XML) as x 
    from tblMachineContact m 
    where mi.PKEY=m.MAC_PKEY and m.CONTACT_CATEGORY_PKEY in ('PC'))t 
cross apply x.nodes ('/x') as Split(a)) [Customer Email] 
from tblMachine mi 
inner join tblCustomers on m.CUST_PKEY=c.PKEY 
where mi.STATUS='A' and m.CONTACT_CATEGORY_PKEY in ('PC','TC','ER') 

答えて

1

私のクエリです:

select distinct c.PKEY [Customer Code], c.NAME [Customer Name], 
     mi.MODEL [Machine #], 
     x.[Customer Email] 
from tblMachine mi inner join 
    tblCustomers c 
    on m.CUST_PKEY = c.PKEY outer apply 
    (select Split.a.value('.','varchar(100)') as [Customer Email] 
     from (select cast('<x>' + replace(m.CONTACT_EMAIL,';','</x><x>')+'</x>' as XML) as x 
      from tblMachineContact m 
      where mi.PKEY = m.MAC_PKEY and m.CONTACT_CATEGORY_PKEY in ('PC') 
      ) t cross apply 
      x.nodes('/x') as Split(a) 
    ) x 
where mi.STATUS = 'A'; 
+0

こんにちは、それはうまく動作します、ありがとうございます。しかし、もう一つ質問があります。質問欄を参照して助言してください。 – LT268

関連する問題