我的任务是创建一个存储过程,该过程将按SalesOrderID
计算来自三个不同表的SalesOrderDetailID
和orderdate
列。
表1:Salesorderheader
列
表2:Salesorderdetail
列
我内心加入了SalesID
列中的两个表格,但我对Salesid
和salesdetailId
列的记录保持不变。
当分别计算两列时,我得到正确的计数,但是当我将它放入连接时,我得到两列的相同计数。
我的问题是为什么SQL Server使列相等?
答案 0 :(得分:1)
当您在单个查询中计算多个列时,它只是计算记录总数。您需要做的是使用子查询来获取不同列的计数。
答案 1 :(得分:1)
如果您想要salesid
和salesdetailid
:
select count(distinct salesid), count(salesdetailid)
from Salesorderheader soh join
Salesorderdetail sod
on soh.salesid = sod.salesid;
通常count(<column name>)
计算列的非空值。它不计算不同值的数量。
答案 2 :(得分:0)
Count
函数计算Non Null
行的总数,包括重复行。在您的情况下,在与SalesOrderDetail表连接之后,salesOrderID在结果集中将具有重复值。要么你必须使用
Count(Distinct SalesOrderID)
或者你可以使用像
这样的子查询select (select COUNT(SalesorderID) from Salesorderheader) as OrderIDCount,
(select COUNT(SalesorderDetailID) from SalesOrderDetail) as OrderDetailIDCount