首页 > 解决方案 > SQL 从包含表名、列名和值列映射的数据表中将数据插入到多个表中,可以在源中更改

问题描述

我很困惑。这看起来可行,但不确定如何实现。
我有一个看起来像这样的数据表。数据源有时会交换源文件中的列。

Data                            
    IN      column          table_sheet          y      w       value   
    col1    Route           Summary              2021   Week 1  a   
    col2    CNG/Diesel      Summary              2021   Week 1  5           
    col3    Freq            Summary              2021   Week 1  B       
    col4    Weekly Miles    Summary              2021   Week 1  6       
    col1    CNG/Diesel      Summary              2021   Week 2  1       
    col2    Freq            Summary              2021   Week 3  1       
    col3    Weekly Miles    Summary              2021   Week 4  1       
    col1    Load            Days_ON              2021   Week 1  L210224-25048   
    col2    Load_id         Days_ON              2021   Week 1  L210224-25048
    col3    cost            Days_ON              2021   Week 1  263.64  
    col1    Distance        CCD                  2021   Week 2  781.62      
    col2    Code            CCD                  2021   Week 2  CL      
    col3    Name            CCD                  2021   Week 2  Squre       
    col4    Cost            CCD                  2021   Week 2  1800 

源文件是一个包含多个工作表(项目的表名称)的电子表格,每周填充一次并且是增量的。源文件列映射可以更改,如表摘要中一样,源中的所有列(excel 源文件列索引)都已更改。目标表已经存在所有可能的列名。SQL 代码必须读取表名并将数据相应地映射到源表。

I want to populate the below tables using the data table above like this.               
Summary     Route    CNG/Diesel Freq    Weekly Miles    y       W
            a        5          B       6               2021    Week 1
                     1                                  2021    Week 2
                                1                       2021    Week 3
                                        1               2021    Week 4
                            
Days_ON                 
        Load            LoaD_id         cost    y          W
        L210224-25048   L210224-25048   263.64  2021       Week 1   
                            
                            
CCD                         
        Distance        Code    Name        Cost    y       W
        781.62          CL      Squre       1800    2021    Week 1  

添加 - 该解决方案可能适用于一行,但不适用于同一周的多行。

Data                
IN      column           table_sheet     y      w     value h1_ind
    col1    Route        Summary        2021    Week 1  a   2
    col2    CNG/Diesel   Summary        2021    Week 1  5   3
    col3    Freq         Summary        2021    Week 1  B   4
    col4    Weekly Miles Summary        2021    Week 1  6   5
    col1    Route        Summary        2021    Week 1  b   2
    col2    CNG/Diesel   Summary        2021    Week 1  1   3
    col3    Freq         Summary        2021    Week 1  1   4
    col4    Weekly Miles Summary        2021    Week 1  1   5
    col1    Route        Summary        2021    Week 1  c   2
    col2    CNG/Diesel   Summary        2021    Week 1  5   3
    col3    Freq         Summary        2021    Week 1  B   4
    col4    Weekly Miles Summary        2021    Week 1  6   5
    col1    Route        Summary        2021    Week 1  d   2
    col2    CNG/Diesel   Summary        2021    Week 1  1   3
    col3    Freq         Summary        2021    Week 1  1   4
    col4    Weekly Miles Summary        2021    Week 1  1   5

Desired output:
table_sheet    y      w      Route CNG/Diesel  Freq  Weekly Miles
Summary       2021   Week 1   a       5         B     6
Summary       2021   Week 1   b       1         1     1
Summary       2021   Week 1   c       5         B     6
Summary       2021   Week 1   d       1         1     1

如果可能的话,SQL unpivot 如何提供此输出?我想看看这个。我也想看看我们能不能让勺子工作。请协助。

标签: sqlsql-servertsqlpivotpentaho

解决方案


您需要通过 table_sheet 分隔行,然后为每个 table_sheet 应用 Row 非规范化器,因为您生成不同的表: 转型创造

如何参数化 Switch/case 步骤

如何参数化 Row 非规范化步骤


推荐阅读