Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL相当于其他表中的MySQL_Sql_Sql Server_Tsql - Fatal编程技术网

T-SQL相当于其他表中的MySQL

T-SQL相当于其他表中的MySQL,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在努力在SQLServer中做一些在MySQL中非常简单的事情 我想从一个表中获取一些列(为了简单起见,我们只说一列),然后根据第一个表中的键计算另一个表中的其他列,并在结果集中包含这两个值 以下查询在MySQL中可用,但在SQL Server中不可用: SELECT ph.PONum, COUNT(pd.POLine) AS LineCount FROM POHeader AS ph INNER JOIN PODetail AS pd ON ph.P

我正在努力在SQLServer中做一些在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不假定您要按哪些列进行分组。每个未聚合的列都需要在
分组依据
列表中定义

对于您的查询,它应该是:

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

与MySQL不同,SQL Server不假定您要按哪些列进行分组。每个未聚合的列都需要在
分组依据
列表中定义

对于您的查询,它应该是:

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
还可以使用相关子查询。乙二醇

SELECT 
    ph.PONum, 
    ( select COUNT(*) from PODetail where PONum = ph.POnum ) LineCount
FROM 
    POHeader ph
WHERE
    ph.PONum = 4444

MySQL没有使用
[table\u name]
符号。是的,我知道,但这不是这个问题的重点。啊,我读它的时候你正试图在MySQL方面使用它。MySQL没有使用
[table\u name]
符号。是的,我知道,但这不是这个问题的重点。啊,我是在你试图在MySQL端使用它的时候读到的,所以如果我有20个字段,我就必须按字段1、字段2、字段3分组,等等?哇,是的。@S.Mason这是SQL标准。MySQL在某些方面偏离了SQL标准。。除非您使用的是
SET SESSION sql\u mode=CONCAT(@@sql\u mode',,否则只能使用“full\u group\u by”)
那么MySQL在GROUPBY上遵循SQL标准,所以如果我有20个字段,我就必须按字段1、字段2、字段3进行分组,等等?哇,是的。@S.Mason这是SQL标准。MySQL在某些方面偏离了SQL标准。。除非您使用的是
SET SESSION sql\u mode=CONCAT(@@sql\u mode',,否则只能使用“full\u group\u by”)然后MySQL在组中遵循SQL标准,你是说一个相关子查询你在技术上是正确的-最好的一种正确。你是说一个相关子查询你在技术上是正确的-最好的一种正确。