我立即提出我的查询:
例如,我有表“日历”:
Código | Tramo | días
Semana1|08001800| 5
Semana1|DESCANSO| 2
Semana2|15302100| 4
Semana2|21000800| 1
Semana2|DESCANSO| 2
Semana3|09001900| 5
Semana3|DESCANSO| 2
Semana3|08001800| 2
上面指示的表格是一个时间表,我的问题是是否可以通过以下方式获得结果查询:
Código | Tramo | Tramo | Tramo | Tramo | Tramo | Tramo | Tramo | Tramo | Tramo |
Semana1|08001800|08001800|08001800|08001800|08001800|DESCANSO|DESCANSO|
Semana2|15302100|15302100|15302100|15302100|21000800|DESCANSO|DESCANSO|
Semana3|09001900|09001900|09001900|09001900|09001900|DESCANSO|DESCANSO|08001800|08001800|
理论上,您应该阅读“TRAMO”并重复“天”中指示的次数,并且应该在列中向右重复,而不重复“代码”。
目前我还没有在代码中进行改进,因为我想不出该怎么做,我正在考虑使用 CASE 但它对我不起作用。
有任何想法吗?明白了吗?它是动态的,因为查询将根据该部分的天数延伸到侧面。
请您的指导。
这不是最佳解决方案,我认为有可能以更简单的方式提出,但至少这种方法可以解决您的问题。
首先,我基于你的最大限制部分,这很重要,因为如果这个数字是不确定的,你必须通过一个更复杂的动态查询:找出最大值并写一个语句根据我正在回答您的内容进行动态处理。
另一个重要问题是,原则上,在您的示例中,您没有指示管理时间顺序的字段,我将按照您将示例放在一起的顺序将其添加到逻辑中。
首先是用示例案例定义表格,加上我们讨论的顺序:
下面是建立一个每节天数的表,正如你提到的最多 2 周,在最坏的情况下我们会有 1 节 14 天,所以我们将生成 14 条记录,如下所示:
我们将使用此表生成另一个中间体,基本上我们将为每个部分的每一天生成一条记录,从这里我告诉你这不是最佳解决方案,它是否实用取决于你的数据量处理。要构建我们的中间表:
例如,查看单个案例,
Semana1
数据将如下所示:有了这些数据,我们如何进行一些查询来达到预期的结果就更清楚了:
使用 a
GROUP BY
和MAX
aCASE
我们可以做到这一点(在实践中,我们必须将其余部分添加到 14 节):也可以使用
PIVOT
它(我不记得你在 2008 年是否有它):在这两种情况下,输出都是相同的:
正如我所说,这不是最佳解决方案,我建议您在接受它之前等待其他一些响应(显然,如果它对您有用)。
更新
一个更好的解决方案如下:
此解决方案不需要生成中间表,很抱歉启动最困难的解决方案,但我不确定我是否可以通过其他方式解决它