我使用SQL Server 2012的下面中选择特定行是一个示例数据集SQL 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(姓)填充,Prefix_Suffix为NULL。有时会填充Prefix_Suffix,并且名字和姓氏字段为空。如果它是全部或全部为NULL,我可以处理。我正在努力的行是两个空方案出现在一个组中。一个组在第二级列中具有相同的值。
如果一个组内Prefix_Suffix包含一个值和姓和名都为空&也有地方名字和姓氏包含的值,Prefix_Suffix为null,则我不希望有Prefix_Sufix值的任何行的行。所以当示例数据集发生时,我想过滤它以消除Prefix_Suffix填充的4行。再次,我只希望在具有前缀_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
这是当前select语句。我试图用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语句 –