在SQL Server中生成一个新的Id列,该列将依赖于其他2个id列

时间:2016-12-15 10:44:44

标签: sql-server sql-server-2012

我想生成一个新的id列IndexID,它将取决于其他2个ID。在我的情况下,其他2个ID是OrderIDPatientOrderID

这是我目前的表结构:

Table Structure]

在上图中您可以看到有3行:
第1行的OrderID为121336,PatientOrderID为230216 第2行的OrderID为121337,PatientOrderID为230217 第3行的OrderID为121337,PatientOrderID为230218

我想添加取决于IndexIdOrderID的{​​{1}}。

例如:
第一行PatientOrderID应为1 第2行IndexID应为1 第3行IndexID应为2

这是因为对于每个IndexIdOrderID将从1&如果有两行具有相同的IndexId,则我们会检查OrderID以将PatientOrderID创建为IndexID,依此类推。

目前我使用的1,2在我的查询中不正确,所以请忽略它。

我将能够让您了解我的要求。任何帮助,将不胜感激。提前谢谢。

这是我的问题:

dense_rank

2 个答案:

答案 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,3PatientOrderID等,将输出OrderID }:

OrderID PatientOrderID  IndexID
121336  230216          1
121337  230217          2,1
121337  230218          2,2