**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
两年前关门了。
改进这个问题
我正面临着一个问题 SUM()
函数 MS SQL Server
以及 MySQL
.
以下是表中的值:
docYear docMonth cli des agent code flag doctype qty
2017 3 C01 D1 A1 12345 X OR 3
2017 3 C01 D1 A1 12345 X FA 3
2017 11 C01 D1 A1 12345 X OR 3
2017 11 C01 D1 A1 12345 X FA 3
这个 SQL
查询:
SELECT
docYear
, docMonth
, cli
, agent
, code
, flag
, sum(
case
when
doctype = 'FA'
then
qty
else
0
end
) as qtySum
from
tableName
group by
docYear
, docMonth
, cli
, agent
, code
, flag
退货:
2017 3 C01 D1 A1 12345 X 3
2017 11 C01 D1 A1 12345 X 3
相同的查询,相同的数据,在 MySQL
退货:
2017 3 C01 D1 A1 12345 X 6
2017 11 C01 D1 A1 12345 X 6
正如你所看到的,和显然做的工作不同 SQL
以及 MySQL
.
这两种方法是不同的 SUM()
函数或聚合规则 SQL
以及 MySQL
?
sql版本:
Microsoft SQL Server 2008 R2 (SP2)
mysql版本:
5.7.23
编辑:我无法更新版本。唯一的 MS SQL SERVER
fiddle online我发现它不起作用。。。
谢谢!
1条答案
按热度按时间ghg1uchk1#
我认为mssqlserver和mysql中的“sum”或“case-when”是相同的,但mysql中的groupby和mssqlserver不同。
在标准sql中,应该对所有未聚合的列使用聚合函数。但在您的问题中,“doctype”列不存在于聚合函数或未聚合的选定列中。
实际上,mysql使用groupby的方式与sqlserver的方式不同。
在sql server中,当您在选择查询中删除“doctype”时,实际上您在如下列表中选择:
在sql server中的结果是:
但是group by中的mysql逻辑与sql server不同,它的区别在于依赖于mysql中未聚合的选定列当您从非聚合列中删除“doctype”时实际上您有这样一个表:
在这个链接中描述“mysql处理group by”