我不知道如何命名这个问题,但我有一个oracle表,它有一周中每一天的列。这代表了一家公司的营业日。这些列中的值是“y”或“n”。这是几年前table的设置方式,我无法更改它。
ID | MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY | SATURDAY | SUNDAY
1 Y Y Y Y Y N N
2 N Y Y Y Y Y N
我需要能够查询这个表并得到如下结果,但不知道从哪里开始。
ID | DAYS_OPEN
1 MONDAY - FRIDAY
2 TUESDAY - SATURDAY
这在查询中是可能的还是我需要使用函数?如果一个函数能使它更容易,我也会很好的解决方案。
3条答案
按热度按时间13z8s7eq1#
找到了更简单的解决方案:
完整示例:
结果:
编辑:在原始答案的基础上扩展,将相同的过程应用于一年中的几个月。我不得不在解码中把月数用方括号括起来。然后在regexp\u replace中,我指定了一个不匹配的列表(句点和空格)。
下面是完整的示例:
结果是:
uelo1irk2#
嗯,你的数据格式很糟糕。你可以用一个巨人
case
表达式:只有2^7=128个可能的组合,所以这在一个巨人身上是可能的
case
. 您还可以将这些值放在一个引用表中并连接到该表。kwvwclae3#
首先,您需要使用pivot转换数据:
结果:
然后,您可以筛选val列中有“y”的天数并将其聚合:
结果:
最后一步是按id聚合所有值:
结果: