SQL-запрос для восстановления строк электронной таблицы из таблицы ячеек - PullRequest
0 голосов
/ 28 января 2012

Я извлек набор неструктурированных электронных таблиц из документов Google и загрузил их в базу данных со следующей структурой для дальнейшего анализа.

enter image description here

Моя цель - перейти от строк, которые выглядят так:

SpreadsheetTitle WorksheetTitle Row Column Value
Copy of updated accounting backup (a-e) Accuquote   3   1   September 2005
Copy of updated accounting backup (a-e) Accuquote   5   2   Rate 
Copy of updated accounting backup (a-e) Accuquote   5   3   # of Sales
Copy of updated accounting backup (a-e) Accuquote   5   4   Total Spent
Copy of updated accounting backup (a-e) Accuquote   6   1   Accuquote
Copy of updated accounting backup (a-e) Accuquote   6   2   $70
Copy of updated accounting backup (a-e) Accuquote   6   3   45
Copy of updated accounting backup (a-e) Accuquote   6   4   $3150
Copy of updated accounting backup (a-e) Accuquote   6   5   PAID

К этому:

SpreadsheetTitle WorksheetTitle Row Column1 Column2 Column3.....etc...etc..

Я могу придумать, как продолжить, написав не-SQL-код, но мне любопытно узнать, смогу ли я использовать что-либо по аналогии с рекурсивным запросом (может быть) или функцией разворота.

1 Ответ

1 голос
/ 28 января 2012

Я не эксперт по пивотам: http://msdn.microsoft.com/en-us/library/ms177410.aspx

Но что-то вроде этой работы:

SELECT  SpreadsheetTitle,
        WorksheetTitle,
        row,
        [1] AS Col1,
        [2] AS Col2
FROM    ( SELECT    'spreadsheet' SpreadsheetTitle, 'worksheet' WorksheetTitle, 0 Row, 1 AS [ColumnID], 1 VALUE 
          UNION ALL
          SELECT    'spreadsheet' SpreadsheetTitle, 'worksheet' WorksheetTitle, 0 Row, 2 AS [ColumnID], 2 VALUE 
          UNION ALL
          SELECT    'spreadsheet2' SpreadsheetTitle, 'worksheet' WorksheetTitle, 0 Row, 1 AS [ColumnID], 3 VALUE 
        ) AS flat PIVOT
    ( MAX(Value) FOR [ColumnID] IN ( [1], [2] ) ) AS pivoted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...