내에서 특정 행을 선택하는 것은 예를 들어 데이터 집합이 데이터는 시퀀스의 다양한 나타납니다SQL 서버 나 SQL 서버 아래에 2012을 사용하고 그룹
Prefix_Suffix First_Nm Last_Nm Acct_Registration_Line_1 Acct_Registration_Line_2 secondlevel TopLevel
NULL Jane Smith NULL NULL smith1-rep abc-quarterly
NULL John Smith NULL NULL smith1-rep abc-quarterly
Jane Smith NULL NULL IRA FBO Jane Smith (EQUITY) PERSHING LLC AS CUSTODIAN smith1-rep abc-quarterly
Jane Smith NULL NULL IRA FBO Jane Smith (FI) PERSHING LLC AS CUSTODIAN smith1-rep abc-quarterly
John Smith NULL NULL IRA FBO John Smith (EQUITY) PERSHING LLC AS CUSTODIAN smith1-rep abc-quarterly
John Smith NULL NULL IRA FBO John Smith (FI) PERSHING LLC AS CUSTODIAN smith1-rep abc-quarterly
가, 때로는 어디 First_Nm (이름 만 행이에게있다) 및 Last_Nm (성)이 채워지고 Prefix_Suffix가 NULL입니다. 경우에 따라 Prefix_Suffix가 채워지고 이름과 성 필드는 NULL입니다. 모두 하나 또는 다른 모든 NULL 경우 처리 할 수 있습니다. 내가 고민하는 행은 두 그룹 모두에서 NULL 시나리오가 나타나는 경우입니다. 그룹은 두 번째 레벨 열에 동일한 값을 가짐으로써 표시됩니다.
그룹 내 Prefix_Suffix에 값이 있고 성과 이름이 null 인 경우 & 또한 이름과성에 값이 들어 있고 Prefix_Suffix가 null 인 행이 있습니다. 그런 다음 Prefix_Sufix에 대한 값이있는 행을 원하지 않습니다. 그래서 예제 데이터 집합이 발생하면 Prefix_Suffix가 채워지는 4 개의 행을 제거하기 위해 필터를 적용하려고합니다. 다시 말하지만 Prefix_Suffix & First_nm, Last_Nm 사이에 NULLS가 번갈아 나타나는 그룹에서만이 결과를 원합니다. 여기
Prefix_Suffix First_Nm Last_Nm Acct_Registration_Line_1 Acct_Registration_Line_2 secondlevel TopLevel
NULL Jane Smith NULL NULL smith1-rep abc-quarterly
NULL John Smith NULL NULL smith1-rep abc-quarterly
원하는 결과는 현재의 선택 문입니다. UNION ALL로 2 NULL 시나리오를 분리하려고했지만 충분하지 않았습니다.
WITH DATA AS
(
SELECT *,
COUNT(Acct_Nbr) OVER (PARTITION BY acct_nbr)AcctCount
FROM ##temptable
WHERE 1 = 1
AND acct_holder_role_cd <> 'sec'
)
SELECT *
INTO ##PrefixedAccounts
FROM DATA
WHERE AcctCount = 1 AND Last_Nm IS NULL;
SELECT
RcdTypId,Acct_Nbr,Acct_Short_Nm,Acct_Holder_Typ_Cd,Acct_Holder_Role_Cd, Prefix_Suffix
,First_Nm,Middle_Nm,Last_Nm,Acct_Registration_Line_1,Acct_Registration_Line_2
INTO ##temptable2
FROM ##temptable
WHERE NOT EXISTS
(
SELECT ##PrefixedAccounts.Acct_Nbr
FROM ##PrefixedAccounts
WHERE ##PrefixedAccounts.Acct_Nbr = ##temptable.Acct_Nbr
);
WITH DATA AS
(
SELECT
RcdTypId,Acct_Nbr,Acct_Short_Nm,Acct_Holder_Typ_Cd,Acct_Holder_Role_Cd,Prefix_Suffix,
NULL AS First_Nm, Middle_Nm, Last_Nm,Acct_Registration_Line_1,Acct_Registration_Line_2
FROM ##PrefixedAccounts
UNION ALL
SELECT
RcdTypId,Acct_Nbr,Acct_Short_Nm,Acct_Holder_Typ_Cd,Acct_Holder_Role_Cd,NULL AS Prefix_Suffix,First_Nm,Middle_Nm,Last_Nm,
NULL AS Acct_Registration_Line_1,NULL AS Acct_Registration_Line_2
FROM ##temptable2
)
SELECT * INTO ##ClientNames FROM DATA
DROP TABLE ##temptable2
DROP TABLE ##PrefixedAccounts
-- SELECT * FROM ##ClientNames ORDER BY prefix_Suffix desc
-- DROP TABLE ##ClientNames
SELECT distinct
cl.Prefix_Suffix,cl.First_Nm,cl.Last_Nm,cl.Acct_Registration_Line_1,cl.Acct_Registration_Line_2
,at.secondlevel,at.TopLevel FROM ##ClientNames cl
INNER JOIN ##AddeparTemplate at ON cl.Acct_nbr = at.owned
WHERE 1 = 1
AND (cl.Last_Nm IS NOT NULL OR cl.Acct_Registration_Line_1 IS NOT NULL)
ORDER BY cl.prefix_suffix, at.secondlevel
DROP TABLE ##ClientNames
는 –
이 상당히 작동하지 select 문 –