以下查询给了我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
我需要的是将2714放入变量中的选择。像
select @numTotalOpenSalesOrders=count(soh.A_Import_Set_No)
但是那给了我2714行“ 1”。我尝试使用SUM来查看是否可以将所有1加起来,但这没用。
答案 0 :(得分:1)
您的查询实际2714条记录。
如果只想计算结果集中的记录数,则只需将其包装到SELECT COUNT(*) FROM (<your query>)
中即可:
SELECT @numTotalOpenSalesOrders = COUNT(*)
FROM (
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
) x
另外,通过查看您的查询,似乎可以通过多种方式对其进行简化:
left join OpenSalesOrdersL sol on sol.Number = soh.No where sol.Number IS NOT NULL
:在功能上等同于INNER JOIN
having count(sol.line_no) > 0
:HAVING
子句将始终为true(请参见上一点)
group by soh.No
:由于没有聚合函数起作用,因此并没有真正的作用
我真的怀疑这整个过程可以简化为:
SELECT @numTotalOpenSalesOrders = COUNT(DISTINCT soh.No)
FROM OpenSalesOrdersH soh
INNER JOIN OpenSalesOrdersL sol ON sol.Number = soh.No
答案 1 :(得分:1)
嗯。 。 。我认为这可以满足您的要求:
select count(*)
from OpenSalesOrdersH soh
where exists (select 1
from OpenSalesOrdersL sol
where sol.Number = soh.No and
sol.line_no is not null
);
这种方法的优点是您可以使用OpenSalesOrdersL(Number, line_no)
上的索引对其进行优化,因此它也应该非常快。
哦,然后将值放在变量中:
select @cnt = count(*)
. . .