有没有办法在一个存储过程/ UDF中执行以下操作:
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 :(得分: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
;