从sql语句返回多个值

时间:2008-12-20 01:03:35

标签: sql tsql

我正在查看sql内部查询(有点类似于C#anon方法的sql),并且想知道,我可以从查询中返回多个值吗?

例如,将表中的行数作为一个输出值返回,还作为另一个输出值返回不同的行数?

另外,如何区别工作?这是基于一个字段是否与另一个字段相同(因此归类为“不同”)?

我正在使用Sql Server 2005.如果我从一个查询中返回一个值而不是从一个查询中返回两个值,会不会有性能损失?

由于

4 个答案:

答案 0 :(得分:2)

你可以这样做第一个问题:

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

(对于第一个字段,你可以做*如果需要计算空值。)

Distinct表示单词的定义。它消除了重复的返回行。

返回2个值而不是1取决于值是什么,是否被索引以及其他未确定的可能变量。

如果您在select语句中表示子查询,则不能只返回1个值。如果您想要多于1个值,则必须使用子查询作为连接。

答案 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)等来查询不同的数据。

答案 2 :(得分:0)

表单中的内部查询:

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

无法返回多行。当您需要来自辅助查询的多行时,通常需要在另一个查询上执行内部联接。

行:

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

将返回一行包含两列的数据集。第1列是表中的总行数。第2列仅计算不同的行。

Distinct表示返回的数据集不会有任何重复的。区别只能在选择后直接出现一次。因此查询如:

SELECT distinct a, b, c FROM table 

可能会有这样的结果:

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

请注意,值在整个结果集中重复,但每行都是唯一的。

我不确定你的最后一个问题是什么意思。您应该从查询中返回与查询相关的所有数据。至于更快,只有基准测试可以告诉你哪种方法更快。

答案 3 :(得分:0)

你可以通过3种方式返回多个结果(在我的脑海中)

  1. 通过选择多个值,例如:select col1,col2,col3
  2. 有多个查询,例如:select 1;选择“2”;选择colA。你可以通过调用.NextRecord()
  3. 在datareader中找到它们
  4. 使用输出参数,在执行查询之前声明参数,然后从中获取值。例如:set @ param1 =“2”。 string myparam2 = sqlcommand.parameters [“param1”]。tostring()
  5. 不同,过滤结果行是唯一的。