我想生成一个新的id列IndexID
,它将取决于其他2个ID。在我的情况下,其他2个ID是OrderID
和PatientOrderID
。
这是我目前的表结构:
在上图中您可以看到有3行:
第1行的OrderID
为121336,PatientOrderID
为230216
第2行的OrderID
为121337,PatientOrderID
为230217
第3行的OrderID
为121337,PatientOrderID
为230218
我想添加取决于IndexId
和OrderID
的{{1}}。
例如:
第一行PatientOrderID
应为1
第2行IndexID
应为1
第3行IndexID
应为2
这是因为对于每个IndexId
,OrderID
将从1&如果有两行具有相同的IndexId
,则我们会检查OrderID
以将PatientOrderID
创建为IndexID
,依此类推。
目前我使用的1,2
在我的查询中不正确,所以请忽略它。
我将能够让您了解我的要求。任何帮助,将不胜感激。提前谢谢。
这是我的问题:
dense_rank
答案 0 :(得分:1)
row_number () over (partition by O.Id order by smsFDGPatientOrder.Id) as IndexId
答案 1 :(得分:0)
如果我的要求正确,您使用dense_rank
是正确的。你只需要添加一些额外的逻辑:
cast(dense_rank() over (order by OrderID) as nvarchar(10))
+ case when dense_rank() over (order by PatientOrderID) > 1
then N',' + cast(dense_rank() over (partition by OrderID order by PatientOrderID) as nvarchar(10))
else N''
end as IndexID
对于同一1
中的任何其他OrderID
值,对于第一个1,2
,然后1,3
,PatientOrderID
等,将输出OrderID
}:
OrderID PatientOrderID IndexID
121336 230216 1
121337 230217 2,1
121337 230218 2,2