首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取用于查询销售表的时间段中包含的月份的更好方法

获取用于查询销售表的时间段中包含的月份的更好方法
EN

Database Administration用户
提问于 2017-09-21 20:31:15
回答 2查看 83关注 0票数 4

我试图自动化一些销售处理,目前大部分是手动的。我得到的销售按月表示为201701201702等。

我想要完成的部分工作是更好地对历史数据重用聚合查询,目前云中只保存了很多查询。我需要能够通过一年和季度,并得到一个模式,以匹配销售数据。我希望使用datetime函数中构建的SQL来实现这一点,而不是使用case语句和强制转换。

有什么更好的方法来完成以下操作,即不依赖于字符串操作?

代码语言:javascript
复制
-- the @year and @quarter will be passed into a SP    
declare @year int = 2017
declare @quarter int = 2

declare @name_timePeriod nvarchar(20) = 'Qtr'+ ' ' + cast(@quarter as nvarchar(2)) + ' ' + cast(@year as nvarchar(4))

declare @contained_periods nvarchar(max) = 

case @quarter
    when 1 then cast(@year as nvarchar(4)) + '0[1-3]'
    when 2 then cast(@year as nvarchar(4)) + '0[4-6]'
    when 3 then cast(@year as nvarchar(4)) + '0[7-9]'
    when 4 then cast(@year as nvarchar(4)) + '1[0-2]'
end
EN

回答 2

Database Administration用户

发布于 2017-09-22 15:11:06

我注意到您已经决定了解决方案,但希望提供另一个使用亚伦·伯特兰的日期维数表的建议。

在很多情况下,日期维表会派上用场。

假设您已经创建并加载了他的Date维度表,它将非常简单,如下所示:

代码语言:javascript
复制
DECLARE @year INT = 2017
    ,@quarter INT = 3

SELECT DISTINCT convert(VARCHAR(4), [Year]) + right(REPLICATE('0', 2) + convert(VARCHAR(2), [Month]), 2) as Period
FROM DateDimension
WHERE [Year] = @year
    AND [Quarter] = @quarter

--OR

SELECT DISTINCT substring(MMYYYY,3,4) + substring(MMYYYY,1,2) as Period
FROM DateDimension
WHERE [Year] = @year
    AND [Quarter] = @quarter

给予

代码语言:javascript
复制
| Period |
|--------|
| 201707 |
| 201708 |
| 201709 |
票数 2
EN

Database Administration用户

发布于 2017-09-22 13:14:50

Nate...you需要构建一个sproc,它需要一个日期范围,例如:@startdate@enddate,两者都是datetime

将行规范化为datedatetime数据类型,即使您必须假设day部件是01

一旦规范化了日期时间值(S),就可以使用where datetime_field between @startdate and @enddate

我建议不要尝试在sql中评估季度数据范围,这个过程更基于过程,并且对基于集合的操作不太友好。

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

https://dba.stackexchange.com/questions/186606

复制
相关文章

相似问题

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