2016-10-04 3 views
0

Я использую 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 
+1

Укажите свой текущий ЗЕЬЕСТ –

+0

добавлен оператор выбора –

ответ

0

Это то, что вы хотите?

select t.* 
from (select t.*, 
      row_number() over (partition by coalesce(prefix_suffix, first_nm + ' ' + last_nm) 
           order by (case when first_nm is not null then 1 else 2 end) 
           ) as seqnum 
     from ##temptable t 
    ) t 
where seqnum = 1; 
+0

Это не совсем работает. Когда есть значения в LastName в группе. Мне не нужны строки, где Prefix_Suffix NULL. Я только хочу, чтобы Prefix_Suffix - это все значения lastName, равные NULL в группе. –