SQL Server按区域内国家统计发票数量的实现问题
按区域内国家统计发票数量的SQL解决方案
需求
统计指定区域(如欧洲)内各个国家的唯一发票数量(同一发票号多次出现仅计1次)。
现有问题
你当前的SQL语句按Customerregion和InvoiceNo分组,输出的是每条发票号的记录,没有按国家维度聚合;且COUNT(InvoiceNo)统计的是发票号的重复出现次数,而非去重后的实际发票数量。
正确SQL语句
SELECT CustomerRegion, CustomerArea, COUNT(DISTINCT InvoiceNo) AS 发票数量 FROM [Data-Warehouse].[dbo].[Master] WHERE CustomerRegion = 'Europe' GROUP BY CustomerRegion, CustomerArea ORDER BY CustomerRegion, CustomerArea
逻辑说明
- 分组维度:同时按
CustomerRegion(区域)和CustomerArea(国家)分组,确保统计结果聚焦到「区域-国家」的层级。 - 去重统计:使用
COUNT(DISTINCT InvoiceNo),自动过滤同一国家内重复的发票号,得到真实的发票数量。
预期输出(基于你提供的样本数据)
| CustomerRegion | CustomerArea | 发票数量 |
|---|---|---|
| Europe | Italy | 1 |
| Europe | Netherlands | 2 |
| Europe | Romania | 2 |
内容的提问来源于stack exchange,提问作者Mr Jackson
相关产品推荐
相关产品推荐

