我是MS SQL服务器的新手,我想编写一个查询来将数据从LHS转换为RHS。 (如下图所示)
我已经提到了here和here给出的答案,但由于在同一个ID上对结果集进行分组,因此无法完全弄清楚查询。
非常感谢任何帮助 感谢。
答案 0 :(得分:3)
您不需要group by clause
在from clause
上,您可以使用2 auto join
使用索引查找下一行和上一行。
在select clause
上你需要调整case when
语句来实现你的特定规则,例如(未经过测试,但想法就在这里):
create table RHS as
select
Curr.policy,
case
when prev.EventDate is null then Curr.policyIssueDate
else EventDate
end as StartDate,
case
when next.EventDate is null then CURDATE()
else EventDate
end as EndDate
from
LHS Curr
left join LHS next on
Curr.INDEX+1= next.INDEX and
Curr.policy = next.policy
left join LHS prev on
Curr.INDEX-1= prev.INDEX and
Curr.policy = prev.policy
今天的日期:
注意:您还可以使用lead
和lag
窗口功能。