2012-11-01 44 views
1

我在SQL Server中的兩個表。如何在不使用光標的情況下一次選擇一條記錄?

DBO.VitalPatientDetails =>

| PatientDetailsId | PatientId | PatientName | UnitName | BedName | PatientDOB | LastAlarmReceivedAt |

DBO.VitalAlarmDetails =>

| Id | PatientDetailsId(指VitalPatientDetails.PatientDetailsId)| VitalGenerationTime | FileName |

我需要以檢索由PatientDetailsId通過VitalGenerationTime升序排序分組DBO.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 

謝謝。

+0

你需要一個sinle VitalGenerationTime(MIN說VitalGenerationTime)每PatientDetailsId? –

+1

能否請您使用遊標和任何樣本數據和所需的輸出張貼您的當前查詢。 –

+0

我需要檢索表DBO.VitalAlarmDetails的各個領域,因爲它是。 – Ajinkya

回答

0

嘗試使用WHILE循環更換CURSOR。我張貼在另一個SO問題的例子:

SQL Server stored procedure avoid cursor

它會成爲像下面這樣:

 
SELECT @PatientDetailsId = MIN (PatientDetailsId) FROM VitalAlarmDetails 
WHILE @PatientDetailsId IS NOT NULL 
BEGIN 

    ' Do stuff here 

    SELECT @PatientDetailsId = MIN (PatientDetailsId) FROM VitalAlarmDetails WHERE PatientDetailsId > @PatientDetailsId 

END 

編輯:

返回一組,而不是在它排去按行,使用類似這樣的東西:

SELECT 
    VAD.* 
FROM 
VitalAlarmDetails VAD JOIN 
     VitalPatientDetails VPD ON VAD.PatientDetailsId = VPD.PatientDetailsId 

編輯2:

JOIN仍然沒有取得預期的結果。建議使用WHILE循環內的臨時表來存儲結果。這似乎奏效了。

+0

我得到了多個結果集。 – Ajinkya

+0

你是指多個結果集?您是否多次看到相同的PatientDetailsID? – SchmitzIT

+0

我沒有多次看到相同的PatientDetailsID。對於每個PatientDetailsID結果集都是不同的,因爲它是通過while循環爲每個患者id選擇的。現在我正在嘗試使用UNION,以便所有進來只有一個結果集。 – Ajinkya

0

OK,所以如果我正確明白你一個結果集,由VitalGenerationTime(並使用由PatientDetailsId下令光標有序?

如何像

SELECT PatientDetailsId, 
     VitalGenerationTime 
FROM VitalAlarmDetails 
ORDER BY PatientDetailsId, 
      VitalGenerationTime 
+0

我希望表VitalAlarmDetails的所有字段。 – Ajinkya

相關問題