【问题标题】:Selecting sets of data and creating a new column in SQL Server在 SQL Server 中选择数据集并创建新列
【发布时间】:2015-02-03 14:19:30
【问题描述】:

在 SQL Server 中,您可以选择第一组值(即第 1 - 52 周)在新列中给它们另一个值,然后选择下一组值。

我遇到的问题是我正在处理的数据表有每个财政年度的周数,从 10 月 1 日之后的第一个星期日开始。所以它只是为每个财政年度迭代 1 - 52。

我正在尝试在一个视图中创建一个列,获取前 52 个给他们一个财政年度值 1,然后抓取下一个 52 个并给他们一个财政年度值 2 依此类推(显然第 1 年从第一条记录)。我也有可以使用的 Week Ending Date 列。

这是表的一个sn-p:

这可能吗?

【问题讨论】:

  • 您的 WeekEndingDate 是否不能准确地告诉您现在是哪个会计年度,因为每个日期都属于一个且仅一个会计年度?
  • 参考您提出的这个问题。 stackoverflow.com/questions/28180653/…
  • 是的,但这取决于年份。即十月的第一个星期日。你是说这是组织它的方式吗?
  • 您可以使用 datediff() 和 datepart() SQL 函数计算 10 月的第一个星期日;整个表中的最小和最大 WeekEndingDate 是多少?应该包含会计年度的列的名称是什么?
  • 周数将始终为 1 - 52,包含财政年度的列可以是任何东西,只要是财政年就可以了,因为我还没有做到。

标签: sql sql-server


【解决方案1】:

离开周日和十月。如果我理解正确,您只需要按照结束日期的顺序为每个出现的周数分配一个排名。

请试试这个(但先使用表或事务的副本检查;当然T 是您的表的名称):

update T
    set fiscal_year = YearNumbers.FiscalYear
from T
    inner join
    (
        select WeekEndingDate, WeekNumber, DENSE_RANK() over (partition by WeekNumber order by WeekEndingDate) as FiscalYear
        from T
    ) as YearNumbers
    on T.WeekEndingDate = YearNumbers.WeekEndingDate and T.WeekNumber = YearNumbers.WeekNumber

【讨论】:

  • 这不太行。它包括多年的值。这可能是我做错了什么。但是对于第 1 财年,当按 FiscalYear、Week_Ending_Date 排序时,前六个值我得到 1/1/2011、1/11/2014、1/18/2014、1/25/2014、1/3/2015、10/1 /2011 年?
  • 所以要么我不明白你想要实现什么,要么你的数据中有一些我不知道的东西。我不太明白你的评论。您能否粘贴您执行的最终查询文本,以及您获得的值与您期望获得的值?
  • 这种格式:m/d/y 和您在此处显示的顺序表明您的日期被排序为字符串。为什么呢?您是否显示某些应用程序的结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2017-03-14
相关资源
最近更新 更多