Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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
Mysql MS SQL案例内部计数_Mysql_Sql Server - Fatal编程技术网

Mysql MS SQL案例内部计数

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

我在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.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。谢谢你的果汁