我在SQL Server中有两个表。
dbo.VitalPatientDetails =>
|derationdetailsid |患者|患者名称|unitname |床位|患者|lastalarmreceivedat |
dbo.vitalalarmdetails =>
|id |DisteraDeTailsID(RefitalPatientDetails.patientdetailsid)|Vitalgeneration Time |文件名|
我需要检索DBO的所有领域。由VitalGeneration Time按升序顺序排列的DepertaLsidsID分组的VitalAlarmDetails。我已经为此编写了光标,如下所示,它正在返回多个结果集。我需要在不使用光标的情况下将其单套件进行。我只想知道我是否可以没有光标。
DECLARE @PatientDetailsId BIGINT
DECLARE @getAlarmDetails CURSOR
SET @getAlarmDetails = CURSOR FOR SELECT PatientDetailsId FROM VitalPatientDetails
OPEN @getAlarmDetails
FETCH NEXT FROM @getAlarmDetails INTO @PatientDetailsId
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT * FROM VitalAlarmDetails
WHERE PatientDetailsId = @PatientDetailsId
ORDER BY VitalGenerationTime ASC
FETCH NEXT FROM @getAlarmDetails INTO @PatientDetailsId
END
CLOSE @getAlarmDetails
DEALLOCATE @getAlarmDetails
谢谢。
尝试使用WHILE
循环替换CURSOR
。我在另一个问题中发布了一个示例:
SQL Server存储的过程避免光标
它将成为以下内容:
从VitalAlarmDetails中选择@patientdetailsid = min(daterdetailsid)而@patientdetailsid并非null开始 '在这里做事 从VitalAlarmDetails中选择@patientdetailsid = min(daterdetailsid),derationdetailsid> @patientdetailsid结尾
编辑:
要返回一组而不是一行返回它,请使用类似的东西:
SELECT
VAD.*
FROM
VitalAlarmDetails VAD JOIN
VitalPatientDetails VPD ON VAD.PatientDetailsId = VPD.PatientDetailsId
edit2:
JOIN
仍未产生预期结果。建议在WHILE
循环内使用温度表来存储结果。这似乎有效。
好的,所以如果我正确理解您单个结果集,由VitalGeneration Time订购(以及使用由DisteryDetailsid订购的光标?
> 之类的东西怎么样SELECT PatientDetailsId,
VitalGenerationTime
FROM VitalAlarmDetails
ORDER BY PatientDetailsId,
VitalGenerationTime