我正在使用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语句中并维护我需要的结构。 –