Sql 获取存储过程中变量的行数
以下查询提供了2714行:Sql 获取存储过程中变量的行数,sql,sql-server,tsql,group-by,count,Sql,Sql Server,Tsql,Group By,Count,以下查询提供了2714行: SELECT soh.No FROM OpenSalesOrdersH soh LEFT JOIN OpenSalesOrdersL sol ON sol.Number = soh.No WHERE sol.Number IS NOT NULL GROUP BY soh.No HAVING COUNT(sol.line_no) > 0 我需要的是一个select,它将2714放入一个变量中。差不多 select @numTotalOpenSalesOrders
SELECT soh.No
FROM OpenSalesOrdersH soh
LEFT JOIN OpenSalesOrdersL sol ON sol.Number = soh.No
WHERE sol.Number IS NOT NULL
GROUP BY soh.No
HAVING COUNT(sol.line_no) > 0
我需要的是一个select,它将2714放入一个变量中。差不多
select @numTotalOpenSalesOrders=count(soh.A_Import_Set_No)
但这只给了我2714行“1”。我试着求和,看看是否能把所有的1加起来,但没有用。你的查询实际上有2714条记录 如果您只想计算结果集中的记录数,那么只需将其包装成一个
选择count(*)FROM()
:
此外,通过查看您的查询,似乎可以通过以下几种方式简化查询:
:这在功能上等同于左连接opensalesordsl sol on sol.Number=soh.No其中sol.Number不为空
内部连接
:having count(sol.line_no)>0
子句将始终为真(参见上一点)having
:由于没有聚合函数发挥作用,因此没有真正的用处group by soh.No
SELECT @numTotalOpenSalesOrders = COUNT(DISTINCT soh.No)
FROM OpenSalesOrdersH soh
INNER JOIN OpenSalesOrdersL sol ON sol.Number = soh.No
您的查询实际上包含2714条记录 如果您只想计算结果集中的记录数,那么只需将其包装成一个
选择count(*)FROM()
:
此外,通过查看您的查询,似乎可以通过以下几种方式简化查询:
:这在功能上等同于左连接opensalesordsl sol on sol.Number=soh.No其中sol.Number不为空
内部连接
:having count(sol.line_no)>0
子句将始终为真(参见上一点)having
:由于没有聚合函数发挥作用,因此没有真正的用处group by soh.No
SELECT @numTotalOpenSalesOrders = COUNT(DISTINCT soh.No)
FROM OpenSalesOrdersH soh
INNER JOIN OpenSalesOrdersL sol ON sol.Number = soh.No
嗯。我想这正是你想要的:
select count(*)
from OpenSalesOrdersH soh
where exists (select 1
from OpenSalesOrdersL sol
where sol.Number = soh.No and
sol.line_no is not null
);
这种方法的优点在于,您可以使用opensalesordsl(Number,line_no)
上的索引对其进行优化,因此它也应该相当快
哦,要将值放入变量中:
select @cnt = count(*)
. . .
嗯。我想这正是你想要的:
select count(*)
from OpenSalesOrdersH soh
where exists (select 1
from OpenSalesOrdersL sol
where sol.Number = soh.No and
sol.line_no is not null
);
这种方法的优点在于,您可以使用opensalesordsl(Number,line_no)
上的索引对其进行优化,因此它也应该相当快
哦,要将值放入变量中:
select @cnt = count(*)
. . .
很好的解释!愚蠢的联合总会把我搞砸。欢迎@Dizzy49!很好的解释!愚蠢的联合总会把我搞砸。欢迎@Dizzy49!