Oracle: Как я могу реализовать “естественный” порядок - в SQL-запросе?

Вы можете создать скрытые Row объекты с значениями от 8 до 1048576 RowIndex и добавить их в sheetData. Однако это приведет к довольно большому файлу Excel.

Лучшим, оптимизированным способом было бы определить в свойствах форматирования листа, что строки скрыты по умолчанию и видны только, если указано.

Например, как следующее:

using (var spreadsheetDocument = SpreadsheetDocument.Create(filePath,
    SpreadsheetDocumentType.Workbook))
{
    var workbookpart = spreadsheetDocument.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet();

    workbookpart.Workbook
        .AppendChild(new Sheets())
            .AppendChild(new Sheet()
            {
                Id = workbookpart.GetIdOfPart(worksheetPart),
                SheetId = 1,
                Name = "Sheet 1",
            });

    var sheetFormatProperties = new SheetFormatProperties()
    {
        DefaultRowHeight = 15,
        ZeroHeight = true
    };
    var sheetData = new SheetData();
    worksheetPart.Worksheet.Append(sheetFormatProperties, sheetData);

    // Add first 8th visible rows, the rest will be hidden.
    for (uint i = 1; i < 8; i++)
    {
        var row = new Row() { RowIndex = i };
        sheetData.Append(row);

        // Add cells to row ...
    }
}
7
задан Mark Harrison 20 October 2008 в 22:26
поделиться

1 ответ

Можно использовать функции в порядке - пунктом. В этом случае можно разделить нечисловые и числовые части поля и использовать их в качестве двух из критериев упорядочивания.

select * from t
 order by to_number(regexp_substr(a,'^[0-9]+')),
          to_number(regexp_substr(a,'[0-9]+$')),
          a;

Можно также создать функциональный индекс для поддержки этого:

create index t_ix1
    on t (to_number(regexp_substr(a, '^[0-9]+')),
          to_number(regexp_substr(a, '[0-9]+$')), 
          a);
8
ответ дан 6 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: