-1

有没有办法在一个存储过程/UDF 中执行以下操作:

  1. 从表中选择
  2. 从 pt 1 中选择的结果中选择
  3. 从 pt 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 应用程序)中,我想调用一个存储过程来保存上面的代码并接收三个记录集。

4

3 回答 3

0

你可以使用这样的东西

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

我在查看您更新的需求后编辑了查询,此查询将显示 3 个记录集,您可以根据您的要求使用它们

于 2013-01-15T14:26:16.573 回答
0
SELECT *
FROM ( SELECT * 
       FROM ( SELECT *
              FROM BIG_DATA_TABLE )
       WHERE blah blah )
WHERE blah blah
ORDER BY etc

这应该适用于大多数数据库,包括Sql Server

我不明白第 4 点。你想如何返回所有三个结果?通过将后续结果的行添加到第一个结果表中?

可以编写三个单独的查询(主查询、带有第一个子查询的主查询和带有两个子查询的主查询)并使用 a 将每个查询的结果连接到下一个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

于 2013-01-15T14:04:04.383 回答
0

如果要在第一个查询中检索到的详细数据旁边返回计数,可以使用窗口聚合函数:

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
;
于 2013-01-16T17:19:35.793 回答