изменить формат данных с отдельных строк в нескольких столбцах на несколько строк в одном столбце со столбцом идентификатора данных - PullRequest
0 голосов
/ 10 марта 2020

У меня есть данные CSV с идентификатором (имя) и 100-200 столбцов со значениями данных для каждого идентификатора (имя).

Например. Я хочу преобразовать из:

Name1 Value1 Value2 Comment1 Location7

Name2 Value3 Value4 Comment2

Name3 Value5 Comment3 Comment4 Location8

В:

Name1  Value1

Name1  Value2

Name1  Comment1

Name1  Location7

Name2  Value3

Name2  Value4

Name2  Comment2

Name3  Value5 

Name3  Comment3 

Name3  Comment4 

Name3  Location8

Мне нужно сделать наоборот:

изменить формат данных с отдельные строки в одну строку

Это может быть предпочтительно в Excel или SQL, который я пытаюсь выучить.

Спасибо за любой вклад, к сожалению, используемое мной программное обеспечение требует это.

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Это довольно просто с Power Query (доступно в Excel 2010+), и все это можно сделать из пользовательского интерфейса

  • Выберите первый (имя) столбец
  • Unpivot другие столбцы
  • Удалить столбец атрибута

MCode (хотя вам это и не нужно)

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Column1"}, "Attribute", "Value"),
    #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Attribute"})
in
    #"Removed Columns"

enter image description here

0 голосов
/ 10 марта 2020

Вы можете использовать боковое соединение. Немного неясно, как именно выглядят ваши данные, но что-то вроде этого:

select t.name, v.value
from t cross join lateral
     (values (t.value1), (t.value2), (t.comment1), . . . 
     ) v(value)
where v.value is not null;
...