1

I am implementing an application in both C# and Java, and would like to have functionality similar to the ORDER BY function in SQL. However, to do this I must understand the concept of ordering multiple columns.

I have tried writing simple SQL statements such as

SELECT * FROM TABLE ORDER BY Field1,Field2.

On doing so, only Field1 is ordered. Is there actually any use at all for specifying multiple columns?

4

5 に答える 5

4

これを考慮してください:Field1行の値が等しい場合はどうなりますか?

基本的に、あなたの例では、最初にでField1並べ替え、値が等しい場合は並べ替えますField2

例:

Field1 | Field2
A        4
B        1
A        3

order by Field1, Field2

Field1 | Field2
A        3
A        4
B        1
于 2013-02-16T10:38:04.353 に答える
1

そうすると、Field1のみが注文されます。

いいえ。2番目の列は、最初の列の値が等しい場合の順序付けに使用されます。

このようなテーブルを作成することを考えてみましょう。

CREATE TABLE tbl
    ([Field1] varchar(1), [Field2] int)
;

INSERT INTO tbl
    ([Field1], [Field2])
VALUES
    ('A', 1),
    ('A', 2),
    ('B', 1),
    ('B', 2),
    ('C', 4),
    ('C', 2),
    ('C', 1)
;

これを実行するqueryと;

Select *
From tbl
Order by Field1

結果としてあなたに与えます

FIELD1  FIELD2
A   1
A   2
B   1
B   2
C   4
C   2
C   1

に基づいてのみ注文するため、これは正常ですField1。他の列については何も気にしませんでした。

しかし、これを実行するqueryと;

Select *
From tbl
Order by Field1, Field2

これは結果としてあなたに与えます

FIELD1  FIELD2
A   1
A   2
B   1
B   2
C   1
C   2
C   4

クエリを実行すると言ったので、これは正常です。まず、列の値に基づいて結果を並べ替えます。Field1一部のField1値が等しい場合は、Field2列に基づいて並べ替えます。

于 2013-02-16T10:40:09.073 に答える
0

の値が同じである行が複数ある場合Field1、それらは内部的に次の順序で並べ替えられますField2

Field1 | Field2
-------+--------
 1     | 243
 2     | 23
 2     | 42
 2     | 278
 3     | 1
于 2013-02-16T10:40:25.913 に答える
0

テーブルが「person」、Field1が「last_name」(家族名)、Field2が「first_name」(名)であるとすると、「Smith」の姓を共有する3人に、2番目の種類の名が適用されます。

Smith Tim
Picard Bernard
Smith Alice
Smith Bob

になる…</p>

Picard Bernard
Smith Alice
Smith Bob
Smith Tim

他の人が言ったように、前のソートフィールドが重複する値に遭遇すると、連続するソートフィールドが機能します。

于 2013-02-16T10:46:59.317 に答える
0

ORDER句で複数の列を指定すると、最初の列、2番目の列、3番目の列の順に並べられます。たとえば、Forename、Surnameで注文した場合、結果は最初にForenameで並べ替えられます。つまり、すべてのAが最初に並べられ、次にSurnameで並べ替えられます。したがって、各Aは名前で並べ替えられます。したがって、2つのAlbertが含まれている場合ソートされていないテーブルにAlbertEinsteinとAlbertDaviesの順に表示されるデータは、名前の順にリストに表示されます。

Forename   |   Surname
Albert     |   Davies
Albert     |   Einstein
Arthur     |   Dent

フォアネームで注文すると、次のようになります(もちろん、アインシュタインがソートされていないテーブルのデイビスの上に表示される場合)。

Forename   |   Surname
Albert     |   Einstein
Albert     |   Davies
Arthur     |   Dent
于 2013-02-16T10:50:55.643 に答える