[英]T-SQL equivalent to MySQL aggragate from other table
我正在努力在SQL Server中做一些在MySQL中超级简单的事情。
我想从一个表中获取一些列(为简单起见,只说一个),然后根据第一个表中的键对另一个表的其他列进行计数,并在我的结果集中包含这两个值。
以下查询在MySQL中有效,但在SQL Server中不适用:
SELECT
ph.PONum,
COUNT(pd.POLine) AS LineCount
FROM
POHeader AS ph
INNER JOIN
PODetail AS pd ON ph.POnum = pd.PONum
WHERE
ph.PONum = 4444
结果:
SQL Server(T-SQL)执行此操作的方式是什么?
与MySQL不同,SQL Server不会假定要分组的列。 需要在GROUP BY
列表中定义每个未聚合的列。
对于您的查询应为:
SELECT
ph.PONum,
COUNT(pd.POLine) AS LineCount
FROM
[Dbo].POHeader AS ph
INNER JOIN
[Dbo].PODetail AS pd ON ph.POnum = pd.PONum
WHERE
ph.PONum = 4444
GROUP BY
ph.PONum
您也可以使用相关子查询。 例如
SELECT
ph.PONum,
( select COUNT(*) from PODetail where PONum = ph.POnum ) LineCount
FROM
POHeader ph
WHERE
ph.PONum = 4444
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.