2012-08-13 79 views
1

我從我的查詢中獲取多個值。如何在sql server中使用for循環場景

select l_t_id from MLTalukDetails join MLDistrictDetails on MLTalukDetails.L_D_Id=4 

它返回13,14,15,16。現在我想一次將這些值分別取出,並從這些值中獲取詳細信息,即

select Sc_Id from MSchoolDetails 
where 
[email protected] and 
[email protected] 

我該怎麼做這種情況。我如何在這裏使用for循環語法?

+0

可以使用[PL/SQL](HTTP: //en.wikipedia.org/wiki/PL/SQL)爲此將提供循環和調節 – 2012-08-13 04:42:53

+0

如果您只需使用單個連接查詢,爲什麼還需要「for循環」?但是,鑑於此,您可能希望看看使用CURSOR如果您必須!!! http://msdn.microsoft.com/en-us/library/ms180169(v = sql.105).aspx – 2012-08-13 04:45:09

+0

它*是*可以使用遊標,但它聽起來像你仍然在尋找某種設置操作/連接。如果您有一個處理返回的行,則可以在應用程序中遍歷結果。 – 2012-08-13 04:46:14

回答

1

我從你的問題推斷,這是你實際上是在尋找完整的解決方案:

SELECT MSchoolDetails.* 
     FROM MLTalukDetails 
INNER JOIN MSchoolDetails ON MTalukDetails.l_t_id = MSchoolDetails.L_T_Id 
    WHERE MLTalukDetails.L_D_ID = 4 AND [email protected] 

通常一個具有涉及兩個表聯接條件。

我建議reading up各種聯接。

+0

非常感謝。我的問題是,我必須展示每所學校的學生人數。輸入我得到的是區編碼,所以我會得到區編號,即MLTalukDetails.L_D_ID。從我的代碼我可以得到所有在學區的學校。現在我怎麼能指望每個學校沒有學生。學校和學生之間的關係是sc_id。我是新手,所以請幫助我。通過下面的代碼,我可以得到在學區通過的學生數量爲 – Pavi 2012-08-13 07:07:59

+0

。 SELECT COUNT(MD_ID),如從MMarksDetails noofpassed加入MStudentDetails 上MMarksDetails.St_Reg = MStudentDetails.St_Reg 加入MSchoolDetails 上MStudentDetails.Sc_Id = MSchoolDetails.Sc_Id 加入MLTalukDetails 上MLTalukDetails.L_T_Id = MSchoolDetails.L_T_Id 上加入MLDistrictDetails MLDistrictDetails.L_D_Id = MLTalukDetails.L_D_Id 其中MLDistrictDetails.L_D_Id = 4和MMarksDetails.Y_Id = 7和MMarksDetails.Result ='p';像這樣我需要整個地區。 – Pavi 2012-08-13 07:15:57

+0

這是你用來實現這種結構的類型:'SELECT school_id,COUNT(student_id)FROM ... WHERE ... GROUP BY school_id' – 2012-08-13 14:37:16

0

使用遊標,如果你想使用循環....這是解決辦法爲你,我在存儲過程中已經實現了....

CREATE PROCEDURE [dbo].[proc_GetSc_Id] 
@yearid INT 
AS 
CREATE TABLE #Sc_Id(Sc_Id varchar(20)) 
BEGIN  
DECLARE @talukid varchar(20) 

    declare c cursor For 
    select l_t_id from MLTalukDetails join MLDistrictDetails on MLTalukDetails.L_D_Id=4 

open c 
    fetch next from c into @talukid 
    while(@@FETCH_STATUS=0) 
    BEGIN 
     insert into #Sc_Id(Sc_Id) 
      select Sc_Id from MSchoolDetails where [email protected] and [email protected] 
     fetch next from c into @talukid 
    END 
    select * from #Sc_Id;---Here you got your final result. 
close c 
deallocate c 
DROP TABLE #Sc_Id 
END 
+2

@downvoter:關注評論? – 2012-08-13 05:02:49

+0

這不是一個不正確的答案,本身,我只是不認爲這是一個明顯的[XY問題]回答基本問題特別有用(http://meta.stackexchange.com/questions/66377/what-is- (xy-problem)),同時也引入了完全不相關的概念(存儲過程),沒有任何解釋。 – 2012-08-13 05:09:42

+0

@mootinator:感謝評論.....我認爲OP想要在其解決方案中實現循環機制....所以,我提供了上述解決方法,雖然還有其他有效的解決方案.....關於存儲過程,我認爲這是使用sql server的好方法.... – 2012-08-13 05:14:13