我想创建一个表格,表明由普通会员链接的医疗服务提供者。例如,如果我去提供1和提供2,那么prov 1和prov 2将被链接,因为我访问了它们。
我有一张表,其中每条记录表示一名成员在特定日期访问提供商。该表包含数百万会员和数千名会员。以下是该表的一个小例子:
member prov date
1 1 1/1/15
1 2 1/2/15
2 16 1/12/14
2 5 1/1/16
我正在尝试创建一个表,其中每个记录表示由一个公共成员链接的两个不同的提供者。例如:
member prov1 prov2 date1 date2
1 1 2 1/1/15 1/2/15
2 16 5 1/12/14 1/1/16
我试图在同一个表上使用内连接,但它返回重复记录。我认为distinct子句会解决这个问题,但它似乎没有完成任务。我的查询如下所示:
select distinct a.member, a.prov, b.prov, a.date, b.date
from table1 as a
inner join table1 as b
on a.member=b.member
此查询返回不同的记录,但有些记录包含相同的信息。下面显示了一个例子:
a.member a.prov b.prov a.date b.date
1 1 2 1/1/15 1/2/15
1 2 1 1/2/15 1/1/15
上面我们看到记录是截然不同的,但它们描述了相同的信息。以下是我希望查询返回的内容:
a.member a.prov b.prov a.date b.date
1 1 2 1/1/15 1/2/15
如何更改上述查询以便我只返回不同的信息?我不想要每个会员1条记录。我希望会员每个不同的配对分配1条记录。
答案 0 :(得分:0)
一种选择是使用conditional aggregation
将row_number
与子查询一起使用:
select member,
max(case when rn = 1 then prov end) prov1,
max(case when rn = 2 then prov end) prov2,
max(case when rn = 1 then date end) date1,
max(case when rn = 2 then date end) date2
from (select member,
prov,
date,
row_number() over (partition by member order by prov, date) rn
from table1) t
group by member