SQL表转换-在“Select”命令中使用“if”语句将列中的文本拆分为它们自己的行
我有一个以下格式的源日期表:SQL表转换-在“Select”命令中使用“if”语句将列中的文本拆分为它们自己的行,sql,hana,Sql,Hana,我有一个以下格式的源日期表: Year Mon1 Mon2 ... Mon12 2025 1110001110001101 0010111010110110 2024 000111011011101 0101101110110101 这是源表。这是一个日历表,月列中的每个1或0表示一天,1表示工作日,0表示根据美国假日日历计算的每年未工作日 我希望将此表转换为以下格式,如图2所示 Year Month Day Working d
Year Mon1 Mon2 ... Mon12
2025 1110001110001101 0010111010110110
2024 000111011011101 0101101110110101
这是源表。这是一个日历表,月列中的每个1或0表示一天,1表示工作日,0表示根据美国假日日历计算的每年未工作日
我希望将此表转换为以下格式,如图2所示
Year Month Day Working day
2025 01 01 0
2025 01 02 1
整张桌子
有人知道实现这一目标的方法吗
自下而上方法:
步骤1:表单查询以提取特定年份的各个月份列
步骤2:应用拆分\字符串拆分\到\表逻辑以将列转换为行。提及
步骤3:将这些列的case语句应用于行表,以确定这是工作日还是非工作日
第四步:合并每个月的所有结果
步骤5:对所有年份重复此逻辑。提到的源表是SAP factory日历表。 我已经在中详细解释了这一点 由于日历计算非常常见,SAP HANA附带了助手函数,可以采用factory calendar table TFACS格式并处理数据,而无需进行复杂的转换 对于上述场景,可以使用WORKDAYS_BETWEEN函数,请参见 在我的示例中,我维护了2018年的表TFACS。 通过日历通用查询,我生成2018年1月1日至2019年1月1日之间所有日期的日期。 对于每一天,都会为序列生成日期表函数的当前和次日时段开始和时段结束调用WORKDAYS BETWEEN函数,以确定这是否是工作日 如果在TFACS中找不到条目,则函数的结果为空
请注意,还有一个名为ADD_WORKDAYS的函数,当要求不仅将日历与工作日制成表格,而且进行计算并将工作日考虑在内时,该函数非常方便。至少,您需要标记您正在使用的数据库。感谢您的输入-该数据库是SAP/HANA数据库,我正在使用microsoft SQL中的SQL规则进行查询。我从来不知道这个概念存在!因此,这些函数在不显式引用TFACS表的情况下工作?WORKDAY函数采用可选参数来指定要使用的TFACS表的模式。请参阅文档。
WITH calendar AS (
SELECT
GENERATED_period_start AS start_day,
GENERATED_period_end AS end_day
FROM
series_generate_date('INTERVAL 1 DAY', '2018-01-01', '2019-01-01' )
)
SELECT
cal.start_day AS cal_day,
DAYNAME( cal.start_day) day_name,
workdays_between ('AU', cal.start_day, cal.end_day, 'SYSTEM') AS workday
FROM
calendar cal;
CAL_DAY |DAY_NAME |WORKDAY|
----------|---------|-------|
2018-01-01|MONDAY | 0|
2018-01-02|TUESDAY | 1|
2018-01-03|WEDNESDAY| 1|
[...]
2018-12-28|FRIDAY | 0|
2018-12-29|SATURDAY | 1|
2018-12-30|SUNDAY | | <-- date not maintained in TFACS
2018-12-31|MONDAY | | <--/