回答:
実際には非常に簡単なトリックがあります。最初にフィールド「A」でソートし、次に「A」内のフィールド「B」でソートするとします。最初に、属性テーブルのフィールド「B」のヘッダーを左クリックします(昇順でソートするには1回クリックし、降順では2回クリックします)。次に、フィールド「A」のヘッダーを左クリックします(ASCの場合は1回、DESCの場合は2回目)。この最後のアクションでは、フィールド「A」がソートされますが、フィールド「B」のソートは「A」の同一値内に保持されます。3つのフィールドで試してみましたが、それも機能します(退屈しました)。QGIS 3.6.3-Noosaを使用しています。
Sort and Numberプラグインを使用できます。最大3つのフィールドで属性テーブルを並べ替えることができ、並べ替えられた機能の順序を含む追加のフィールドを作成します。
免責事項:私はプラグインの著者です。
sort()
機能に直接依存していますが、なぜそれがそんなに遅いのかと思います。将来のバージョンでプロセスを高速化するためのトリックを見つけようとします。
結果を永続的に保存してもよい場合は、GDALでシェープファイルをソートできます。
ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp
100万ポリゴンのシェープファイルで3分もかかりませんでした。
QGISのDBマネージャープラグインには、QGISプロジェクトに読み込まれたシェープファイルに対してSQLコマンドを記述できる「仮想レイヤー」ノードがあります。
したがって、この機能を使用できるようになったので、複数フィールドでソートするSQLロジックは、asc(昇順)、desc(降順)を使用するORDER BYステートメントにあり、それらを一緒にストリング化して複数の列でソートできます。
追加のボーナスは、より多くのSQLを学習できることです。したがって、シェープファイルにうんざりしていて、ほとんどの場合、PostGISの飛躍はそれほど大きくありません。
これは、少なくともバージョン3.2以降では、プラグインやデータベース固有の作業なしで実行できます。複数の列でソートするには:
concat()
適切な順序で並べ替えたいフィールドとともに追加します(例:)concat("column1", "column2")
。コードの下に出力プレビューが表示されます。この機能は問題#1137で追加され、ユーザーマニュアルの最新(開発)バージョンで説明されています。
concat("col1", right( ('000' || tostring( "col2" )), 4))
まあ、それは2018年ですので、私はこれがまだ答えられていないとは信じられません。
属性テーブルビューを開き、任意の列を右クリックして、[ 並べ替え... ]を選択します 。
ダイアログウィンドウの属性テーブルの並べ替え順序の設定は、完全な式エディターでも開いています。
目的の列でCOALESCE関数を使用します。たとえば、3列でテーブルをソートします(最初にID、次にVERSION、次にfid)。
coalesce("ID","VERSION","fid" )
[OK]をクリックすると、テーブルが並べ替えられます
できません(少なくとも現時点では)。ごめんなさい!
QGISドキュメントを参照して、最後の行までスクロールします。
厄介な回避策は、ShapefileのDBFをExcelに取り込むことです。そこでソートして、結果を保存します。または、シェープファイルをPostGISまたはSpatialLiteにインポートして、より優れた並べ替え機能を提供します。基本的に、高度なソートのためにQGISをバイパスする必要があります。
@Sylvester Sneeklyから示唆されているように、PosGISやSpatialLiteなどのRDBMSにデータが読み込まれる場合、RDBMSでデータベースデータを作成して、表形式のデータを事前に並べ替えてから、事前に並べ替えられたビューをQGISにレイヤーとして読み込むことができます。