我正在尝试查询以下示例数据,如果RowNum = 1或ToUse =X。 但是,如果“帐户”具有两个值(红色方块内的示例),然后对“ ToUse”列进行优先级排序,则需要添加一个额外条件,在下面示例中,ID为6的帐户有6条记录:
我希望查询结果消除3个用于维护属性的值– 19734
此图片下面是我正在使用的当前查询
SELECT
Id,
OpportunityId,
OpportunityName,
OpportunityStage,
Email,
RowNum,
CreatedDate,
ToUse,
FirstName,
LastName,
Mobile,
AccountName,
AccOppotunityInProgress,
AccTotalLoanPaid,
AccTotalClosedLost,
TotalOppsLoanFunded,
Useractive,
EmailOptOut,
AccountID
FROM (
SELECT
con.Id AS [Id],
opp.Id AS [OpportunityId],
acc.Id AS [AccountID],
opp.Name AS [OpportunityName],
opp.CreatedDate AS [CreatedDate],
opp.StageName AS [OpportunityStage],
con.FirstName AS [FirstName],
con.LastName AS [LastName],
con.MobilePhone AS [Mobile],
con.Useractive__c AS [Useractive],
con.Email AS [Email],
con.HasOptedOutOfEmail AS [EmailOptOut],
acc.Name AS [AccountName],
acc.Total_Opportunities_in_Progress__c AS [AccOppotunityInProgress],
acc.Total_Loan_Paid__c AS [AccTotalLoanPaid],
acc.Total_Closed_Lost__c AS [AccTotalClosedLost],
opp.Total_Opportunities_Loan_Funded__c AS [TotalOppsLoanFunded],
CASE WHEN opp.StageName = 'Loan Funded'
THEN 'X'
ELSE 'FU'
END AS ToUse,
row_number() OVER(PARTITION BY opp_con_role.ContactId ORDER BY opp.CreatedDate DESC) AS RowNum
From [Opportunitycontactrole] Opp_Con_Role
INNER JOIN [Opportunity] opp
On Opp_Con_Role.Opportunityid = Opp.Id
INNER JOIN [Contact] con
On Opp_Con_Role.Contactid = Con.Id
INNER JOIN [account] acc
ON acc.Id = opp.AccountId
WHERE con.Email IS NOT NULL OR con.MobilePhone IS NOT NULL
) sr ORDER BY sr.OpportunityName
这是表的架构
预期结果将是下表,其中没有用黄色高亮显示的行:(第14 -17行也应突出显示为黄色)
编辑: 当我添加该分区时,我得到的结果与我想要的结果非常接近,但是所请求文档的阶段值记录应该为1
ROW_NUMBER() OVER (PARTITION BY opp_con_role.ContactId ORDER BY CASE WHEN opp.StageName = 'Loan Funded' THEN 1 ELSE 2 END, opp.CreatedDate DESC) AS RowNum
答案 0 :(得分:1)
我建议通过包含类似于order by
列的RowNum
来更改用于建立case expression
的{{1}}。这样,我认为您可以省去该列。
ToUse
答案 1 :(得分:0)
如果您问的是我想问的问题(可能不是,这可能意味着您最后一个示例的第14-17行也应显示为黄色),那么您可以尝试以下方法:
(未优化,但这只是一个起点)
Select * from assorted_tables
where ToUse = 'X'
or (RowNum = 1
AND
accountID not in (select accountID from assorted_tables
where toUse = 'X')
)