小编Ste*_*eld的帖子

比较 SQL Server 2008 中的 DISTINCT、GROUP BY 和 ROW_NUMBER() 与数据仓库工作负载

我最近听到了这样的建议:“如果您使用的是 DISTINCT,我会挑战您修复您的代码。” 但是,我想知道这个建议背后的考虑因素,以及这是否意味着我应该以不同的方式处理以下问题。

问题背景

我有一个非规范化的日期维度表(Kimball 星型架构)。在这张表中,我折叠了几个第三范式表:日期、绝对周、绝对月和年。对于这些折叠表中的每一个,我都有一个表示唯一标识的列、一个文本名称列和一个数字手动排序索引。这是显示结构的示例行,数字仅用于说明(为便于阅读采用垂直形式):

  • 日期编号:20110507
  • 日期名称:2011 年 5 月 7 日
  • 日期订单:17813
  • 周号:201118
  • :2011 年第 18 周
  • 周订单:617
  • 月号:201105
  • MONTHNAME:2011年5月
  • 月订单: 74
  • 年份编号:2011
  • 年份名称: 2011
  • 年订单: 41

为了便于理解,我选择使用日期维度表,但该问题可以转换为任何其他涉及层次结构的维度表。

问题概要

我想用相关的文本字段检索一组不同的周和月组合。

可能的解决方案

1. 与众不同

SELECT DISTINCT MonthId, WeekId, YearName, MonthName, WeekName
  FROM DimDate
Run Code Online (Sandbox Code Playgroud)

请注意,我不能排除 MonthId 或 WeekId,因为我不能假设自由文本字段是唯一的。

2. 分组依据

SELECT MIN(YearName), MIN(MonthName), MIN(WeekName)
  FROM DimDate
 GROUP BY MonthId, WeekId
Run Code Online (Sandbox Code Playgroud)

3. 行号

WITH grp AS (
  SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server query

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

query ×1

sql-server ×1