从表中选择然后在此记录集上选择SELECT,然后将all全部返回给调用者

时间:2013-01-15 13:52:59

标签: sql select stored-procedures subquery

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

  1. 从表中选择
  2. 从pt 1
  3. 中的select中选择结果
  4. 再次选择pt 1中的select
  5. 的结果
  6. 将pt 1,2和3中的所有三个结果返回给调用者
  7. 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应用程序)中,我想调用一个存储过程来保存上面的代码并接收回三个记录集。

3 个答案:

答案 0 :(得分:0)

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

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

我没有得到第4点。你想如何归还所有三个结果?通过将后续结果的行添加到第一个结果表中?

可以编写三个单独的查询(主要,带有第一个subselect的main和带有两个子查询的main),并使用union将每个查询的结果连接到下一个,但这三个查询需要包含相同数量和类型的列,但这将是yukky。

这样的东西
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 )

编辑:OIC

如果您只是将三个查询放入存储过程,则应该获得三个结果集。 http://msdn.microsoft.com/en-US/data/jj691402

答案 1 :(得分:0)

你可以使用这样的东西

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

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

答案 2 :(得分: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
;