Je suis nouveau sur le server MS SQL et je veux écrire une requête pour transformer datatables de LHS en RHS. (comme montré dans l'image ci-dessous)
Je me suis référé aux réponses données ici et ici, mais je n'ai pas pu find la requête complètement à cause du regroupement des résultats sur le même identifiant.
Toute aide est fortement appréciée.
Merci.
Vous n'avez pas besoin group by clause
Sur la from clause
, vous pouvez utiliser 2 auto join
pour searchr les lignes suivantes et précédentes à l'aide de l'index.
Sur la select clause
il suffit d'adapter case when
statement pour implémenter vos règles spécifiques comme ceci (non testé, mais l'idée est ici) :
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
Pour aujourd'hui date:
Remarque: vous pouvez également utiliser la fonction de window lead
et la window de lag
.