有没有一种方法可以像下面这样在SQL中自动计算列名?我需要根据开始日期和结束日期计算日历周数,并平均分配
| 材料|起始日期|结束日期|销售部|
| - -|- -|- -|- -|
| 一月|2022年10月3日|二零二二年十月三十一日|千元|
| 二月|二○二二年十一月十四日|二○二二年十一月二十八日|千元|
预期输出
CW =日历周
| 材料|CW40| CW 41型|CW42| CW 43型|CW 44型|CW 45型|CW 46型|CW 47型|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|
| 一月|二百五十个|二百五十个|二百五十个|二百五十个|||||
| 二月|||||||500个|500个|
1条答案
按热度按时间li9yvcax1#
有没有办法像下面这样在SQL中自动计算列名。
不可以,在SQL(不仅仅是Oracle SQL)中,您需要固定的已知列名数量,因此不可能使用静态SQL查询动态生成列。
如果要生成数据,请执行以下操作之一:
将数据生成为行(而不是列),并在用于访问数据库的任何第三方应用程序中透视结果。可以使用相关行生成器生成输出:
或:
其中,对于示例数据:
两者输出:
| 材料|ISO年|ISO_周|每周_销售额|
| - -|- -|- -|- -|
| 一月|小行星2022|四十个|二百五十个|
| 一月|小行星2022|四十一|二百五十个|
| 一月|小行星2022|四十二|二百五十个|
| 一月|小行星2022|四十三个|二百五十个|
| 二月|小行星2022|四十六|500个|
| 二月|小行星2022|四十七|500个|
或者,如果您确实希望将值输出为列,则需要指定列(对于所有53个潜在ISO周,将为53列),可以使用以下命令执行此操作:
或:
这两个输出:
| 材料|ISO年|CW 01系列|CW 02型|CW 03系列|CW 40型|CW 41型|CW 42型|CW 43型|CW 44型|CW 45型|CW 46型|CW 47型|CW 48型|CW49| CW 50型|CW 51型|CW 52型|CW 53型|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|
| 一月|小行星2022| * 空值 | 空值 | 空值 *| 二百五十个|二百五十个|二百五十个|二百五十个| * 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 *|
| 二月|小行星2022| * 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 *| 500个|500个| * 空值 | 空值 | 空值 | 空值 | 空值 | 空值 *|
fiddle