2013-01-15 54 views
-1

有沒有辦法做存儲以下在一個過程/ UDF:從結果從表中選擇,然後選擇這個記錄,然後返回所有呼叫者

  1. 從表中選擇
  2. 選擇從PT的結果選擇在PT 1
  3. 再次選擇從選擇1
  4. 返回從PT 1,2和3的所有三個結果給調用者

PS:三個結果將是記錄集而不是單個值。


好吧,我會盡量讓問題更清楚。我不認爲我能達到什麼我要與子查詢..

僞代碼:

SELECT BrandID, TypeID, CECategoryID, BrandName, ModelID, ModelName 
FROM Boats 
WHERE BrandID = @BrandID 
"INTO @Recordset1" 


SELECT Count(ModelID) AS ModelsPerType 
FROM @Recordset1 
GROUP BY TypeID 
"INTO @Recordset2" 


SELECT Count(ModelID) AS ModelsPerCECategory 
FROM @Recordset1 
GROUP BY CECategoryID 
"INTO @Recordset3" 


"RETURN Recordset1, Recordset2, Recordset3" 

我知道我不能寫我連字符做的事情,但它是要說明我是什麼尋找。在我的代碼(Web應用程序)中,我想調用一個存儲過程來保存上面的代碼並接收三個記錄集。

+0

uhmm,可以發佈具有預期結果的樣本記錄嗎? –

+2

是的,這是可能的。 –

+0

您正在使用哪種數據庫引擎? –

回答

0
SELECT * 
FROM (SELECT * 
     FROM (SELECT * 
       FROM BIG_DATA_TABLE) 
     WHERE blah blah) 
WHERE blah blah 
ORDER BY etc 

這應該在大多數數據庫工作包括Sql Server

我沒有得到一點4.你怎麼想返回三個結果?通過將後續結果的行添加到第一個結果表?

可能寫三個單獨的查詢(主,主與第一子查詢和主要與兩個子查詢),並加入每一個查詢的結果到下一個union,但三個查詢需要包含相同數量和類型的列,但那會很快樂。

喜歡的東西

SELECT * FROM BIG_TABLE 
UNION 
SELECT * FROM (SELECT * FROM BIG_TABLE) WHERE subquery_stuff 
UNION 
SELECT * FROM (SELECT * FROM (SELECT * FROM BIG_TABLE) WHERE subquery_stuff) WHERE sub_subquery_stuff) 

編輯:伊斯蘭會議組織

如果你只是把三個查詢到存儲過程,你應該得到三個結果集。 http://msdn.microsoft.com/en-US/data/jj691402

+0

Re;第4點:我不想參加不同論點的結果。我希望他們分開返回。 我把你的代碼放在一個SP中,我只會收到頂部選擇的記錄。我正在尋找的是能夠分別返回代碼中的三個選擇的所有三個結果。 – TwisterX

+0

我可能是錯的,但不認爲你可以返回3差異。來自單個嵌套查詢的「記錄集」。要返回一個記錄集,你可以使用Ref Cursor,例如。但是我不清楚你真的想要什麼......保持簡單 - 如果你想在SP存儲過程中使用它,我會假設你要寫3個單獨的選擇(可能是過程或包中的函數)。這個吻。方法對於你可能工作的公司來說是最好的和最便宜的。 – Art

0

你可以使用這樣的事情

 Select * From (Select * From (Select * from Table1)T1)T2 --pt3 
     Select * From (Select * from Table1)T1 --pt2 
     Select * from Table1 --pt1 

我一直在看你更新的要求後編輯查詢, 這個查詢將顯示3個記錄集,您可以使用它們根據您的要求

+0

嗯,有趣..這是否意味着我可以返回T1,T2和頂部選擇給調用者? – TwisterX

+0

查看編輯後的查詢,這會給你3個記錄集,你將能夠將所有3返回給調用者 – Ankit

0

如果要將計數與第一個查詢中檢索到的詳細數據並行返回,可以使用window集合函數:

SELECT 
    BrandID, 
    TypeID, 
    CECategoryID, 
    BrandName, 
    ModelID, 
    ModelName, 
    COUNT(ModelID) OVER (PARTITION BY TypeID  ) AS ModelsPerType, 
    COUNT(ModelID) OVER (PARTITION BY CECategoryID) AS ModelsPerCECategory 
FROM Boats 
WHERE BrandID = @BrandID 
; 
相關問題