sql - 如何将此新的自定义列添加到查询的输出中?
问题描述
我正在使用 SQL Server 2014,并且我有以下 T-SQL 查询:
SELECT
[Date],
(CASE
WHEN [Date] BETWEEN '2016-07-01' AND '2017-06-30' THEN 'FY 16-17'
WHEN [Date] BETWEEN '2017-07-01' AND '2018-06-30' THEN 'FY 17-18'
WHEN [Date] BETWEEN '2018-07-01' AND '2019-06-30' THEN 'FY 18-19'
ELSE 'Not Stated'
END) AS [Period]
FROM
DateDimension
WHERE
[Date] BETWEEN '2016-07-01' AND '2019-06-30'
输出如下(摘录):
Date Period
-----------------------
2016-07-01 FY 16-17
2016-07-02 FY 16-17
2016-07-03 FY 16-17
... ...
2017-07-01 FY 17-18
2017-07-02 FY 17-18
2017-07-03 FY 17-18
... ...
2018-07-01 FY 18-19
2018-07-02 FY 18-19
2018-07-03 FY 18-19
... ...
我想在输出中添加一个新列,如下所示:
Date Period Day
-------------------------------
2016-07-01 FY 16-17 D1
2016-07-02 FY 16-17 D2
2016-07-03 FY 16-17 D3
... ... ...
2017-07-01 FY 17-18 D1
2017-07-02 FY 17-18 D2
2017-07-03 FY 17-18 D3
... ... ...
2018-07-01 FY 18-19 D1
2018-07-02 FY 18-19 D2
2018-07-03 FY 18-19 D3
... ... ...
请注意,在D1
每个新财政年度的开始(即 和 )重新2016-07-01
开始。2017-07-01
2018-07-01
如何为这个新列编写 SQL 代码?
附加说明:D1
应持续到每个财政年度结束。例如,从2016-07-01
until 2017-06-30
,列Period
将显示 D1, D2, ..., D365)
解决方案
这是一个示例,您可以如何简化现有的 FY 计算,并获得财政年度的日期:
declare @date date = '20190702';
select year(dateadd(month, -6, @date)) as [FY],
datediff(day, datefromparts(year(dateadd(month, -6, @date)), 6, 30), @date) as [DOFY];
如果需要,也可以对指定日历和财政年度之间偏移量的硬编码常量进行参数化。
推荐阅读
- html - 如何使用 CSS 绘制一个 4 个分段的圆,分段之间有空格?
- go - close(channel) 是阻塞操作吗?
- r - 如何在 excel 中设置我的数据以读入 r,类似于来自 Simmr 包的示例数据
- apache-kafka - 使用 Threadpool 消费 kafka 消息增加内存使用
- android - 如何在 Android 应用程序中为给定语言环境剥离某些资产文件
- javascript - 使用 Turbolinks 在 Rails 项目中拆卸/重置 Hubspot 表单
- java - 在 Jakarta EE JSF Web 应用程序中使用实时数据库(如 firestore)
- python - 如何将列表排序为接近 0 的值
- ruby-on-rails - 我在尝试显示用户个人资料页面时遇到错误“参数丢失或值为空:user_id”
- javascript - 错误:找不到中央目录的结尾