希望您最近过得不错。我遇到以下问题,非常感谢您的建议和支持:
[给出]我在PostgreSQL中有一个这样的表,其中有3个初始列,分别称为Project,size和StartDate(请参见下文):
项目---- / ----大小-/ ---- StartDate
项目1 --- / ----- 88 --- / ---- 2020-06-15
项目2 --- / ----- 105 --- / --- 2020-03-01
我需要在* StartDate 列旁边添加 12 columns_ ,并将初始表扩展为 15 column *。所有新列均表示给定年份(2020)的月份,并且它们将包含0和根据从Size和StartDate列派生的条件逻辑计算的值。条件如下:_如果StartDate属于特定月份,则该月份将获得value = Size,在此之后的下个月,每个月将取Value = Value-50,直到Value> 0。请检查以下预期结果:
项目---- / ----大小-/ ----开始日期-/-一月-/-二月-/-三月-/-四月-/-麦/-六月-/-七月---- /-八月-/-九月-/-十月-/-十一月-/-十二月-/
项目1 --- / ----- 88 --- / ---- 2020-05-15 / --- 0 --- / --- 0 ---- // --- 0 --- // ---- 0 --- // --- 88-// --- 38-// --- 0 ---- // --- 0 ---- //- -0 ---- / --- 0 ---- // --- 0 ---- / --- 0 ---- /
项目2 --- / ----- 105 --- / --- 2020-03-01 / --- 0 --- / --- 0 ---- //-105-//- 55-// --- 5 --- // --- 0 ---- // --- 0 ---- // --- 0 ---- // --- 0- --- / --- 0 ---- // --- 0 ---- / --- 0 ---- /
我希望我能解释我的问题。感谢您可以与我分享的任何建议和支持。
提前谢谢了。
问题来源:stackoverflow
这可以通过许多CASE
表达式来完成:
SELECT project,
size,
startdate,
CASE WHEN mon < 2
THEN greatest(size - 50 * (1 - mon), 0)
ELSE 0
END AS jan,
CASE WHEN mon < 3
THEN greatest(size - 50 * (2 - mon), 0)
ELSE 0
END AS feb,
CASE WHEN mon < 4
THEN greatest(size - 50 * (3 - mon), 0)
ELSE 0
END AS mar,
CASE WHEN mon < 5
THEN greatest(size - 50 * (4 - mon), 0)
ELSE 0
END AS apr,
CASE WHEN mon < 6
THEN greatest(size - 50 * (5 - mon), 0)
ELSE 0
END AS may,
CASE WHEN mon < 7
THEN greatest(size - 50 * (6 - mon), 0)
ELSE 0
END AS jun,
CASE WHEN mon < 8
THEN greatest(size - 50 * (7 - mon), 0)
ELSE 0
END AS jul,
CASE WHEN mon < 9
THEN greatest(size - 50 * (8 - mon), 0)
ELSE 0
END AS aug,
CASE WHEN mon < 10
THEN greatest(size - 50 * (9 - mon), 0)
ELSE 0
END AS sep,
CASE WHEN mon < 11
THEN greatest(size - 50 * (10 - mon), 0)
ELSE 0
END AS oct,
CASE WHEN mon < 12
THEN greatest(size - 50 * (11 - mon), 0)
ELSE 0
END AS nov,
CASE WHEN mon < 13
THEN greatest(size - 50 * (12 - mon), 0)
ELSE 0
END AS dec
FROM (SELECT project,
size,
startdate,
extract(month FROM startdate) AS mon
FROM mytable) AS q;
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。