我正在使用SQL Server存儲過程來生成Excel報表。基本上,報告中的每個「條目」都有三個部分:對象,觀察和點。這些觀察結果提及了一個物體的主要關鍵點,並且這些觀察點提供了一個觀察結果。這是各部分之間的關系。 (很抱歉,如果我的術語是關閉的,我習慣在C#或Java編寫,但仍然在學習SQL)嵌套遊標,多個結果集
我所要的輸出是這樣的:
-Object
-All Observations linked to that Object
- Under each observation there should be all the points linked to that observation
,並重復爲每個對象。我有這樣的工作,使用一個遊標來生成每個對象的所有觀察值,但是我無法得到每個觀察值下的點。
我已經在互聯網上看過所有遊標都是壞的,我認爲這意味着嵌套遊標非常糟糕。但這是迄今爲止我所擁有的。如果你知道更好的方法來做到這一點,請告訴我。如果有必要,我很樂意對此進行完全重構。
DECLARE @Object_Cursor cursor
DECLARE @Observation_Cursor cursor
DECLARE @i int
DECLARE @j int
DECLARE @row int = 1
SET @Object_Cursor = CURSOR FOR (SELECT PK_ObjectId FROM Objects)
OPEN @Object_Cursor
FETCH NEXT FROM @Object_Cursor INTO @i
While @@FETCH_STATUS = 0
Begin
Select
PK_ObjectID,
Name,
Timestamp
From Objects where PK_ObjectID = @i
SET @Observation_Cursor = CURSOR FOR (SELECT @PK_ObservationID FROM Observations)
OPEN @Observation_Cursor
FETCH NEXT FROM @Observation_Cursor INTO @j
While @@FETCH_STATUS = 0
Begin
Select
Timestamp,
Note,
User
from Observations
where FK_ObjectId = @i
order by FK_ObjectID
Select Lat, Lng
From Pts
Where FK_ObservationID = @j
Fetch Next From @Observation_Cursor into @j
END
FETCH NEXT FROM @Object_Cursor into @i
END
Close @Observation_Cursor
DEALLOCATE @Observation_Cursor
CLOSE @Object_Cursor
DEALLOCATE @Object_Cursor
我覺得我正在執行這些循環的順序是關閉的,但我一直無法得到它。電流輸出是:
-Object
-Observations for that object
-empty points result set
這些結果被重複多次爲同一對象時,它轉到下一個之前和點總是空的。
任何幫助或指針在另一個方向非常感謝。
c#思維在SQL中無法正常工作。重新思考,不要使用循環。任何原因,這是不是因爲三個表加入一個sedlect語句? – Twelfth
唉!嵌套遊標。冬季阿拉斯加以外的糖蜜會慢慢變慢。 –
@Telfelf那麼,我需要的結果是單獨的原因,每個對象有多個觀察值,每個觀測值有多個點。我不知道如何將它合併到一個select語句中並維護我需要的結構。 –