首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server 2012 Group By和单个查询中的值

SQL Server 2012 Group By和单个查询中的值
EN

Stack Overflow用户
提问于 2018-10-15 06:39:02
回答 1查看 37关注 0票数 0

尝试使用SQL Server 2012在一条select语句中查看这是否可行。

表如下:

订单

代码语言:javascript
复制
Order_Index Audit_ID
--------------------
101           CB
102           MM
103           CN

Audit_ID、CB和CN是同一个人,应该从结果中排除MM,所以我尝试显示如下内容:

代码语言:javascript
复制
SELECT
    CASE 
       WHEN Audit_Id IN ('CB’, ’CN’) 
          THEN 'Cindy’ 
          ELSE Audit_Id 
    END AS Audit_Id, 
    COUNT(DISTINCT Order_Index) AS ‘Total Orders’
FROM
    Orders 
WHERE 
    Audit_Id IN ('CB', 'CN’)
GROUP BY
    Audit_Id

结果:

代码语言:javascript
复制
Audit_Id    Total Orders
-------------------------    
Cindy           1
Cindy           1

期望的结果:

代码语言:javascript
复制
Audit_Id    Total Orders
-------------------------    
Cindy           2

可以在单个查询中得到结果吗?

谢谢,

布赖恩

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 06:56:03

由于您的所有结果显然都在同一组中,因此这里实际上没有必要使用整个group by子句:

代码语言:javascript
复制
select 'Cindy' as "Audit ID", count(*) as "Total Orders"
from Orders
where Audit_Id in ('CB','CN');

现在,如果你真正想要实现的是某种“自定义”分组,那么你很可能是在追求更像下面这样的东西:

代码语言:javascript
复制
select
    case when Audit_ID in ('A', 'B') then 'Group1' ... else Audit_ID end as "Audit ID",
    count(*) as "Total Orders"
from Orders
group by case when Audit_ID in ('A', 'B') then 'Group1' ... else Audit_ID end;

您必须在group byselect列表之间复制表达式,除非您只是将表达式嵌套在另一个引用中,如派生表或CTE。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52807670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档