2008-12-20 139 views
2

我在查看sql內部查詢(有點像C#anon方法的sql等價物),並且想知道,我可以從查詢中返回多個值嗎?從sql語句中返回多個值

例如,將表中的行數作爲一個輸出值返回,並且作爲另一個輸出值返回不同的行數?

另外,獨特的工作如何?這是基於一個領域是否可能與另一個領域相同(因此被歸類爲「獨特」)?

我正在使用Sql Server 2005.如果我從一個查詢中返回一個值,而不是從一個查詢中返回兩個值,會有性能損失嗎?

感謝

回答

2

您可以通過這樣做你的第一個問題:

SELECT 
    COUNT(field1), 
    COUNT(DISTINCT field2) 
FROM table 

(對於你可以做的第一場*如果需要的話算空值)

鮮明的指這個詞的定義。它消除了重複返回的行。

返回2個值而不是1將取決於值是什麼,如果它們是索引或不是其他未確定的可能變量。

如果您在select語句中指的是子查詢,那麼您只能返回1個值。如果你想要多個值,你將不得不使用子查詢作爲連接。

0

如果內部查詢在SELECT中內聯,您可能很難選擇多個值。但是,經常可以將JOIN改爲子查詢;這樣,子查詢可以被命名,你可以得到多個結果

SELECT a.Foo, a.Bar, x.[Count], x.[Avg] 
FROM a 
INNER JOIN (SELECT COUNT(1) AS [Count], AVG(something) AS [Avg]) x 
    ON x.Something = a.Something 

這可能會有所幫助。

DISTINCT做它說的。 IIRC,你可以SELECT COUNT(DISTINCT Foo)等查詢不同的數據。

0

內部查詢形式:

SELECT * FROM tbl WHERE fld in (SELECT fld2 FROM tbl2 WHERE tbl.fld = tbl2.fld2) 

不能返回多行。從輔助查詢中需要多行時,通常需要對另一個查詢執行內部連接。

行:

SELECT count(*), count(distinct *) from table 

會返回一個數據集包含兩列一行。第1列是表格中的總行數。第2列僅計算不同的行。

不同意思是返回的數據集不會有任何重複。區別只能在選擇後直接出現一次。因此,一個查詢,如:

SELECT distinct a, b, c FROM table 

可能有這樣的結果:

a1 b1 c1 
a1 b1 c2 
a1 b2 c2 
a1 b3 c2 

注意值在整個結果集重複的,但每一行都是唯一的。

我不確定你最後一個問題的含義。您應該從查詢中返回與查詢相關的所有數據。至於更快,只有基準測試可以告訴你哪種方法更快。

0

您可以通過3種方式返回多個結果(關閉我的頭頂部)

  1. 通過具有多個值的選擇,例如:選擇COL1,COL2,COL3
  2. 隨着多個查詢,例如:選擇1;選擇「2」;選擇colA。您可以通過調用來訪問數據讀取器。NextRecord()
  3. 使用輸出參數,在執行查詢之前聲明參數,然後從中獲取值。例如:set @ param1 =「2」。字符串myparam2 = sqlcommand.parameters [「param1」]。tostring()

不同的,過濾結果行是唯一的。