T-SQL相当于来自其他表的MySQL aggragate

时间:2017-11-10 21:58:49

标签: sql sql-server tsql

我正在努力在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

结果:

enter image description here

SQL Server(T-SQL)的方法是什么?

2 个答案:

答案 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