#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 и еженедельных миль, для его добавления потребуется некоторая сложная логика. Как только он у вас будет, вы добавите счетчик в поле Группы на шаге денормализатора.