0

SQL Server 2012 を使用しています。

AdvApp.vPortfolioGroupMemberFlattenedというビューがあります。ポートフォリオグループコードマスターまたはポートフォリオグループコードが開いているが、両方のグループにはない すべてのメンバー ID を返したいと考えています。他のグループのメンバーは気にしません。

次のスタックオーバーフローの記事は、私が必要としているものに近いものですが、テーブルをそれ自体に結合するときに機能しないようです。

2 つのテーブルの違いを返す SQL クエリ

これは私のテーブルです。

PortfolioGroupCode  MemberID    MemberCode
master              316         abc
master              317         def
open                316         abc
open                317         def
open                321         ghi
master              322         jkl
closed               89         lmn

これは、マスターとオープンのメンバー間のデルタを示す私の望ましい結果です。

PortfolioGroupCode  MemberID    MemberCode
open                321         ghi
master              322         jkl

前述の記事から、次の 2 つのクエリを試しました。

SELECT A.*, B.*
FROM [AdvApp].[vPortfolioGroupMemberFlattened] a
FULL JOIN [AdvApp].[vPortfolioGroupMemberFlattened] b
ON (A.PortfolioGroupCode = B.PortfolioGroupCode)
WHERE A.PortfolioGroupCode IS NULL OR B.PortfolioGroupCode IS NULL

SELECT DISTINCT a.membercode, a.portfoliogroupcode
FROM [AdvApp].[vPortfolioGroupMemberFlattened] a
WHERE (
NOT EXISTS (
SELECT b.membercode
FROM [AdvApp].[vPortfolioGroupMemberFlattened] b
WHERE a.PortfolioGroupCode = 'master'
AND b.PortfolioGroupCode = 'open'
))
4

2 に答える 2

1
select distinct PortfolioGroupCode,  MemberID,    MemberCode 
from test 
where memberID not in (
     select distinct a.memberID from test a, test b
     where a.memberId = b.memberID 
     and a.PortfolioGroupCode in ('open','master')
     and a.PortfolioGroupCode <> b.PortfolioGroupCode) 
and PortfolioGroupCode in ('open','master')

デモはこちら

于 2013-07-03T03:49:17.617 に答える