在存储过程中使用SQL Server中的JOIN计算多个表中的多个列

时间:2016-05-11 02:14:57

标签: sql sql-server join

我的任务是创建一个存储过程,该过程将按SalesOrderID计算来自三个不同表的SalesOrderDetailIDorderdate列。

表1:Salesorderheader

  • 销售订单ID
  • ORDERDATE

表2:Salesorderdetail

  • 销售订单ID
  • Sales OrderDetailID

我内心加入了SalesID列中的两个表格,但我对SalesidsalesdetailId列的记录保持不变。

当分别计算两列时,我得到正确的计数,但是当我将它放入连接时,我得到两列的相同计数。

我的问题是为什么SQL Server使列相等?

3 个答案:

答案 0 :(得分:1)

当您在单个查询中计算多个列时,它只是计算记录总数。您需要做的是使用子查询来获取不同列的计数。

答案 1 :(得分:1)

如果您想要salesidsalesdetailid

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