我有这个问题:
SELECT R.ID,
R.clm_FirstName + ' ' + R.clm_Surname2 AS 'Name and surname',
R.clm_Age2 AS 'Age',
V.ID AS 'VISIT ID',
CONVERT(varchar, V.clm_VisitDate, 103) AS 'Visit date',
M.clm_BMI AS 'BMI'
FROM tblData_Registration R
INNER JOIN tblData_Visit V ON R.ID=V.RegistrationID
INNER JOIN tblData_Measurements M ON V.ID=M.VisitID
给了我:
我试图将VisitId编号为1,2,3 ....为每个不同的患者,但我陷入了僵局。不知道从哪里开始。有什么指针吗?
提前感谢一百万。 加夫:)
答案 0 :(得分:3)
SELECT R.ID,
R.clm_FirstName + ' ' + R.clm_Surname2 AS 'Name and surname',
R.clm_Age2 AS 'Age',
V.ID AS 'VISIT ID',
CONVERT(varchar, V.clm_VisitDate, 103) AS 'Visit date',
M.clm_BMI AS 'BMI',
ROW_NUMBER() OVER (PARTITION BY R.ID
ORDER BY V.clm_VisitDate,
V.ID
)
AS clm_visit_number
FROM tblData_Registration R
INNER JOIN tblData_Visit V ON R.ID=V.RegistrationID
INNER JOIN tblData_Measurements M ON V.ID=M.VisitID
ROW_NUMBER()
将从1
创建序列。
PARTITION BY R.ID
表示每个R.ID
都有单独的序列。
ORDER BY
确定在分配顺序值时处理行的顺序。让V.clm_VisitDate,
首先确保它们符合日期顺序。由于某些日期有多次访问,因此订购中还会添加一个附加字段; V.ID
。这意味着,当同一日期(对于同一个人)进行多次访问时,V.ID
最低的访问次序会获得最低的序列号。
答案 1 :(得分:2)
使用rank
窗口功能来实现您的目标:)
SELECT R.ID,
R.clm_FirstName + ' ' + R.clm_Surname2 AS 'Name and surname',
R.clm_Age2 AS 'Age',
rank() over (partition by R.ID order by V.ID) AS 'VISIT ID',
CONVERT(varchar, V.clm_VisitDate, 103) AS 'Visit date',
M.clm_BMI AS 'BMI'
FROM tblData_Registration R
INNER JOIN tblData_Visit V ON R.ID=V.RegistrationID
INNER JOIN tblData_Measurements M ON V.ID=M.VisitID