sqlserver Distinct去重和判断一起用
时间: 2025-06-28 20:00:36 浏览: 10
### 如何在 SQL Server 中结合 `DISTINCT` 和 `CASE WHEN` 进行去重和条件判断
在 SQL Server 中,可以利用 `COUNT(DISTINCT ...)` 函数与 `CASE WHEN...THEN...END` 表达式相结合的方式实现基于特定条件的去重统计。这种组合允许针对不同类别或条件下唯一记录的数量进行精确计算。
对于具体的应用场景,假设有一个名为 `Users` 的表格,其中包含用户的 ID (`UserID`) 及其类型 (`UserType`) 字段。为了统计不同类型用户(例如普通用户 vs VIP 用户)各自的独立成员数,可采用如下语句:
```sql
SELECT
COUNT(DISTINCT CASE WHEN UserType = 1 THEN UserID END) AS NormalUsers,
COUNT(DISTINCT CASE WHEN UserType = 2 THEN UserID END) AS VipUsers
FROM Users;
```
上述查询会返回两个列:一个是代表所有标记为普通用户的不重复ID总数;另一个则是VIP级别用户的相应数值[^1]。
当涉及到更为复杂的业务逻辑时,比如依据状态字段过滤有效条目并对其进行分类汇总,则可以通过调整 `CASE WHEN` 子句内的条件表达式来满足需求。下面的例子展示了如何在一个订单详情表(`OrdersDetail`)里找出处于已发货状态的不同商品种类下的独特客户群体规模:
```sql
SELECT
ProductCategory,
COUNT(DISTINCT CASE WHEN OrderStatus = 'Shipped' AND ProductCategory='Electronics' THEN CustomerID END) As Shipped_Electronic_Customers,
COUNT(DISTINCT CASE WHEN OrderStatus = 'Shipped' AND ProductCategory='Clothing' THEN CustomerID END) As Shipped_Clothing_Customers
FROM OrdersDetail
GROUP BY ProductCategory;
```
这里不仅实现了按产品类别的分组操作,还进一步限定了只有那些被标记为“已发货”的记录才会参与最终的结果集构建过程[^2]。
通过这种方式,在处理涉及多个维度的数据分析任务时能够更加灵活高效地获取所需信息,同时也提高了SQL语句本身的可读性和维护性[^3]。
阅读全文
相关推荐

















