MS SQL:如何用CASE语句合并多值为单字段统计订单数
解决MS SQL中CASE分组合并的问题
你的问题出在GROUP BY子句上——你现在是按原始的Country字段分组,所以即使CASE把非德国的都显示成"Everywhere Else",数据库还是会把每个不同的非德国国家单独分组,最终输出多行同名的结果。
只需要把GROUP BY的字段改成和SELECT里的CASE表达式一致就行,或者直接引用CASE的别名(MS SQL支持在GROUP BY中使用SELECT里的别名),修正后的查询如下:
SELECT CASE WHEN A.Country = 'Germany' THEN 'Germany' ELSE 'Everywhere Else' END AS ShipTo, COUNT(OrderID) AS OrderCount FROM Customers A INNER JOIN Orders B ON A.CustomerID = B.CustomerID GROUP BY CASE WHEN A.Country = 'Germany' THEN 'Germany' ELSE 'Everywhere Else' END;
或者更简洁的写法(利用MS SQL允许GROUP BY引用SELECT别名的特性):
SELECT CASE WHEN A.Country = 'Germany' THEN 'Germany' ELSE 'Everywhere Else' END AS ShipTo, COUNT(OrderID) AS OrderCount FROM Customers A INNER JOIN Orders B ON A.CustomerID = B.CustomerID GROUP BY ShipTo;
这样执行后,所有非德国的订单会被合并到一行"Everywhere Else"中,最终只会输出两行结果:一行是德国的订单总数,一行是其他所有国家的订单总数。
内容的提问来源于stack exchange,提问作者LibrarianMN
相关产品推荐
相关产品推荐

