【问题标题】:Generate rows till end of the year based on current month's data根据当前月份的数据生成直到年底的行
【发布时间】:2019-08-21 08:29:58
【问题描述】:

我从一年的第一天开始到当前月份的数据。我必须通过更改标志来获取当前月份的数据并填充相同的数据,直到年底

我打算创建一个联合所有查询,但无法根据当前月份动态更改它。

我有一个包含 8 列的表,第 9 列是“标志”,其中一列是带有月年数据的日​​期。问题是我必须选择当前月份数据并使用月份年份作为即将到来的月份名称填充相同的数据,直到年末剩余 7 列的标志为“未来”。最好的方法是什么?例如,我有从 19 年 1 月到 19 年 8 月的数据。我必须复制 August'19 的数据并将日期(Month_Year)字段更改为 'September'19 到 December'19,并将其与原始表结合起来,因为它有全年数据和实际数据直到 19 年 8 月,并复制了 8 月的数据19 至 2019 年 12 月

【问题讨论】:

  • 请添加示例数据和所需的输出。
  • 我在 excel 中有示例数据,但无法上传

标签: sql oracle plsql


【解决方案1】:

请添加表结构/数据集。您也可以附上带有数据的表格的sn-p /图片。

1.请记住,8 月目前只有 21 天的数据。因此,您可以在剩余天数中重复最后几天的数据。 2.您也可以尝试使用 FORALL 将数据插入回表中,但这可能会很棘手,因为月份必须更改 4 次

基于此,示例代码可以是:

 DECLARE

l_remaining_mnths         NUMBER;
TYPE tab_sho IS TABLE OF sho_table%ROWTYPE
INDEX BY BINARY_INTEGER;
l_tab tab_sho;
l_month  VARCHAR2(100);
j        NUMBER := 0;
BEGIN

  SELECT 12 - EXTRACT(MONTH FROM sysdate)
  INTO l_remaining_mnths
  FROM dual;
  
  SELECT *
  BULK COLLECT INTO l_tab
  FROM sho_table
  WHERE flag = 'current';
  
  dbms_output.put_line('total records-->'||l_tab.COUNT);

  FOR i in 1..l_remaining_mnths
  LOOP
    SELECT TO_CHAR(ADD_MONTHS(sysdate,i),'Month')||19
    INTO l_month
    FROM dual;
  
      dbms_output.put_line('l_tab(i).month_year -->'||l_tab(i).month_year);
      
      FOR j IN l_tab.FIRST..l_tab.LAST
      LOOP
        l_tab(j).month_year := l_month;
        
        INSERT INTO sho_table
        (
        month_year
        ,column2
        ,flag
        )
        VALUES
        (
        l_tab(j).month_year
        ,'newvalue'
        ,'future'
        );
      
      END LOOP;
   
    EXIT WHEN SQL%NOTFOUND;
    
  END LOOP;
  /*
      dbms_output.put_line('Before for all');
      FORALL j IN 1..l_tab.COUNT
      INSERT INTO sho_table
      VALUES l_tab(j);
      dbms_output.put_line('after for all');
  */
EXCEPTION
WHEN OTHERS THEN
     dbms_output.put_line('We are in the exception  '||SQLERRM);

END;

【讨论】:

  • 你能把它分解一下,让我知道它在做什么吗?我无法理解代码在做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多