根据优先级参考表选择列值?
Posted
技术标签:
【中文标题】根据优先级参考表选择列值?【英文标题】:Selecting column values base on a priority reference table? 【发布时间】:2017-07-19 12:15:59 【问题描述】:我想创建一个选择查询,它将根据参考表中设置的优先级为每一列选择值。如果一列有多个值,它将使用日期字段选择最新的。
例子:
客户表:
CustomerID customerName CustomerEmail monthDate SourceID
1 Michael NULL 1/1/2017 4
2 Sarah Sarah@email.com 2/1/2017 2
3 Dave Dave@no.com 3/1/2017 1
4 Sal Sal@mail.com 4/1/2017 4
4 Sally Sall@emai.com 5/1/2017 4
1 Mike S Mike.s@em.com 5/1/2017 3
参考表:
SourceID Priority
1 2
2 3
3 4
4 1
4我的选择查询会显示:
CustomerID customerName CustomerEmail
1 Michael Mike.s@em.com
2 Sarah Sarah@email.com
3 Dave Dave@no.com
4 Sally Sall@emai.com
因此,当列具有 NULL 值时,它将填充最高优先级值。如果有两个具有相同优先级的值,它将选择具有最近日期的值。这必须在列级别进行选择,以获得每个字段的最新值。
任何帮助或正确方向的观点都会很棒。
谢谢
【问题讨论】:
【参考方案1】:使用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;
【讨论】:
这不会只选择具有最高“优先级”的整行。我需要这个在列级别工作。例如,如果一个客户有 4 行(第 1、2、3 和 4 行),它可以从第 1 行中选择姓名,从第 2 行中选择电子邮件,从第 3 行中选择电话号码等等?以上是关于根据优先级参考表选择列值?的主要内容,如果未能解决你的问题,请参考以下文章