SQL Вставка данных в несколько таблиц из таблицы данных, содержащей имя таблицы, имя столбца и сопоставление столбцов значений, может изменяться в источнике

#sql #sql-server #tsql #pivot #pentaho

Вопрос:

Я в замешательстве. Это выглядит возможным, но я не уверен, как это сделать.
У меня есть таблица данных, которая выглядит так. Источник данных иногда меняет местами столбцы в исходном файле.

 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 может предоставить этот вывод? Я хотел бы на это посмотреть.
Я также хотел бы посмотреть, сможем ли мы заставить ложку работать.
Пожалуйста, помогите.

Ответ №1:

Вам нужно будет разделить строки по табличному листу, а затем применить денормализатор строк для каждого табличного листа, потому что вы создаете разные таблицы: Преобразование для создания

Как вы параметризуете шаг переключения/обращения

Как вы параметризуете шаг денормализатора строк

Комментарии:

1. Это не работает для нескольких строк: см. Выше — ДОБАВЛЕНО — пожалуйста, помогите

2. Хорошо, это не работает, потому что у вас нет «уникального ключа» для денормализации таблицы, то, чего вы хотите достичь, будет работать только в том случае, если вы получите (и прочитаете) строки по порядку, если вы смешаете строки, это не сработает. Если строки упорядочены, вы можете добавить счетчик, который изменяется только при получении нового значения table_sheet, y, w и маршрута, но остается неизменным для остальных миль CNG, Freq и еженедельных миль, для его добавления потребуется некоторая сложная логика. Как только он у вас будет, вы добавите счетчик в поле Группы на шаге денормализатора.