我正在努力在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)的方法是什么?
答案 0 :(得分:3)
与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
答案 1 :(得分:1)
您还可以使用相关子查询。 EG
SELECT
ph.PONum,
( select COUNT(*) from PODetail where PONum = ph.POnum ) LineCount
FROM
POHeader ph
WHERE
ph.PONum = 4444