基于优先级参考表选择列值?
问题描述:
我想创建一个select查询,它将根据参考表中设置的优先级为每列选择值。如果列中有多个值,它将使用日期字段选择最近的值。基于优先级参考表选择列值?
例子:
客户表:
CustomerID customerName CustomerEmail monthDate SourceID
1 Michael NULL 1/1/2017 4
2 Sarah [email protected] 2/1/2017 2
3 Dave [email protected] 3/1/2017 1
4 Sal [email protected] 4/1/2017 4
4 Sally [email protected] 5/1/2017 4
1 Mike S [email protected] 5/1/2017 3
参考表:
SourceID Priority
1 2
2 3
3 4
4 1
4My选择查询会显示:
CustomerID customerName CustomerEmail
1 Michael [email protected]
2 Sarah [email protected]
3 Dave [email protected]
4 Sally [email protected]
那么,一列有一个NULL值它将填充最高优先级值。如果有两个具有相同优先级的值,它将选择具有最近日期的值。必须在列级选择此选项才能获取每个字段的最新值。
任何帮助或正确方向的一个点将是伟大的。
感谢
答
使用join
带来的表一起,并获得优先。然后你可以使用row_number()
选择“第一”为每一个客户:
select c.*
from (select c.*,
row_number() over (partition by c.customerid
order by r.priority desc, monthdate desc
) as seqnum
from customer c join
reference r
on c.sourceid = r.sourceid
) c
where seqnum = 1;
这会不会只是选择整行最高“优先级”。我需要这个在列级别上工作。例如,如果一个客户(行1,2,3和4)有4行,它可以从行1中选择名称,从行2中选择电子邮件,从行3中选择电话号码等等? – alwaystrying