Я использую SQL Server 2012. Ниже приведен пример DataSetSQL Server Выберите отдельные строки в группе
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 (Last Name), а Prefix_Suffix - NULL. Иногда Prefix_Suffix заполняется, а поля первого и последнего имени - NULL. Я могу обработать, если все одно или все другие являются NULL. Строки, с которыми я сталкиваюсь, - это когда в группе появляются оба сценария NULL. Группа указывается тем же значением в столбце второго уровня.
Если в группе Prefix_Suffix указано значение, а имя и фамилия равны 0: &, также существуют строки, в которых первое и фамильное имя содержат значение, а префикс_Suffix равен нулю. Тогда я не хочу, чтобы строки, имеющие значение для Prefix_Sufix, не нужны. Поэтому, когда набирает примерный набор данных, я бы хотел отфильтровать его, чтобы исключить 4 строки, в которых заполняется Prefix_Suffix. Опять же, мне нужен только этот результат в группах, у которых есть чередующиеся NULLS между Prefix_Suffix & First_nm, Last_Nm.
Желаемая Result
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
Вот текущий оператор выбора. Я пытался изолировать 2 NULL-сценарии с UNION ALL, но этого было недостаточно.
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
Укажите свой текущий ЗЕЬЕСТ –
добавлен оператор выбора –