Mysql MS SQL案例内部计数
我在MS SQL方面没有任何经验,我正在努力转换我的MySQL查询:Mysql MS SQL案例内部计数,mysql,sql-server,Mysql,Sql Server,我在MS SQL方面没有任何经验,我正在努力转换我的MySQL查询: select m.Customer, count(if(c.AtFault="Me",1,null)) 'MeLate', count(if(c.AtFault="You",1,null)) 'YouLate', count(*) 'Total' from m left join r on m.OrderNumber = r.OrderNumber left join c on r.Reaso
select
m.Customer,
count(if(c.AtFault="Me",1,null)) 'MeLate',
count(if(c.AtFault="You",1,null)) 'YouLate',
count(*) 'Total'
from m
left join r on m.OrderNumber = r.OrderNumber
left join c on r.ReasonCodeID = c.ID
group by m.Customer
这就是我试图在MS SQL上运行的内容:
select
m.Customer
count(CASE WHEN c.AtFault="Me" THEN 1 ELSE null) 'MeLate',
count(CASE WHEN c.AtFault="You" THEN 1 ELSE null) 'YouLate',
count(*) 'Total'
from m
left join r on m.OrderNumber = r.OrderNumber
left join c on r.ReasonCodeID = c.ID
group by m.Customer
但这会引发非信息性错误:
SQL错误(102):靠近“')的语法不正确
三个错误:
当时,案例结尾处缺少结尾
您必须使用单引号而不是双引号
忘记了在m.Customer
试试这个:
select
m.Customer,
count(CASE WHEN c.AtFault='Me' THEN 1 ELSE null END) MeLate,
count(CASE WHEN c.AtFault='You' THEN 1 ELSE null END) YouLate,
count(*) Total
from m
left join r on m.OrderNumber = r.OrderNumber
left join c on r.ReasonCodeID = c.ID
group by m.Customer
此处缺少结束,您可以尝试求和而不是计数
select
m.Customer,
sum(CASE WHEN c.AtFault='Me' THEN 1 ELSE 0 end) MeLate,
sum(CASE WHEN c.AtFault='You' THEN 1 ELSE 0 end) YouLate,
count(*) Total
from m
left join r on m.OrderNumber = r.OrderNumber
left join c on r.ReasonCodeID = c.ID
group by m.Customer
单引号而非双引号:='Me'
,在m.Customer
之后缺少逗号。每个案例都必须有一个结尾<代码>当c.AtFault='Me'然后1个ELSE null END时的情况
不需要ELSE null<代码>当c.AtFault=“Me”时,如果我在c.AtFault=“Me”
中使用双引号,则会出现“无效列名”的错误,点击“awe复制/粘贴的匆忙程度是”应该是“。谢谢。一旦计时器允许,我将选择您的答案。@David Browne为什么省略表别名周围的引号更好?使用单引号分隔标识符是不标准的。它甚至没有用于SQL Server的文档记录,而且很容易出错,因为如果您将它们放置在错误的位置,它们可能会被解释为文字字符串。Plus Intellisense将它们标识为文字字符串。SQL server通常使用[]
,其中mySQL使用倒勾来表示对象(表、字段、视图等)Ok。谢谢你的果汁