我在当前页面中有两个查询。它们非常相似,但仍然返回不同数量的记录。这是一个例子:
查询1
SELECT
recid,
cost,
cur_year
FROM Info i
INNER JOIN Extension ex
ON ex.recid = i.recid
AND ex.categoryid = i.categoryid
WHERE cur_year = 2018
AND info_id = 4531
查询2
SELECT SUM(cost) AS cost_total
FROM Info i
INNER JOIN Extension ex
ON ex.recid = i.recid
AND ex.categoryid = i.categoryid
WHERE cur_year = 2018
AND info_id = 4531
AND cost > 0
在这种情况下,查询1返回2条记录。查询2返回1条记录。我想知道将这两个放在SP中是一个好主意吗?当前代码有两个单独的查询,并自动两次访问数据库。我的想法是两个人一次调用数据库并返回两个数据集。如果有人举例说明如何实现这一点请告诉我。谢谢。
为什么不包括另一列?存储过程中的两个查询仍在两次访问数据库。
并且,您可以将其表达为:
SELECT recid, cost, cur_date,
SUM(CASE WHEN cost > 0 THEN cost ELSE 0 END) OVER () as total_cost
FROM Info i INNER JOIN
Extension ex
ON ex.recid = i.recid AND
ex.categoryid = i.categoryid
WHERE cur_date = '2018' AND -- this is suspicious. Dates are not years
info_id = '4531';
由于一些呼叫者在第一次交付结果集时启动返回,因此在您的proc主体的开头设置nocount。我知道没有办法让一个查询返回2套。
set nocount on;