Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Mengurutkan data yang dikembalikan oleh kueri di SQL Server. Gunakan klausa ini untuk:
Urutkan kumpulan hasil kueri menurut daftar kolom yang ditentukan dan, secara opsional, batasi baris yang dikembalikan ke rentang tertentu. Urutan di mana baris dikembalikan dalam kumpulan hasil tidak dijamin kecuali
ORDER BYklausul ditentukan.Tentukan urutan penerapan nilai fungsi peringkat ke tataan hasil.
Note
ORDER BY tidak didukung dalam SELECT/INTO pernyataan atau CREATE TABLE AS SELECT (CTAS) di Azure Synapse Analytics atau Analytics Platform System (PDW).
Syntax
Sintaks untuk SQL Server dan Azure SQL Database.
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ , ...n ]
[ <offset_fetch> ]
<offset_fetch> ::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
]
}
Sintaks untuk Azure Synapse Analytics dan Analytics Platform System (PDW):
[ ORDER BY
{
order_by_expression
[ ASC | DESC ]
} [ , ...n ]
]
Arguments
order_by_expression
Menentukan kolom atau ekspresi untuk mengurutkan kumpulan hasil kueri. Anda dapat menentukan kolom pengurutan sebagai nama atau alias kolom, atau sebagai bilangan bulat non-negatif yang mewakili posisi kolom dalam daftar pemilihan.
Anda dapat menentukan beberapa kolom pengurutan. Nama kolom harus unik. Urutan kolom pengurutan dalam ORDER BY klausul menentukan organisasi kumpulan hasil yang diurutkan. Kumpulan hasil diurutkan menurut kolom pertama, lalu daftar yang diurutkan diurutkan menurut kolom kedua, dan sebagainya.
Nama kolom yang Anda referensikan dalam ORDER BY klausul harus sesuai dengan alias kolom atau kolom dalam daftar pilih, atau ke kolom yang ditentukan dalam tabel yang ditentukan dalam FROM klausa, tanpa ambiguitas apa pun. Jika klausa mereferensikan ORDER BY alias kolom dari daftar pilih, gunakan alias kolom sendiri. Jangan gunakan alias kolom sebagai bagian dari ekspresi dalam ORDER BY klausa.
Contohnya:
Penggunaan yang benar:
SELECT SCHEMA_NAME(schema_id) AS SchemaName FROM sys.objects ORDER BY SchemaName; -- correctPenggunaan yang salah:
SELECT SCHEMA_NAME(schema_id) AS SchemaName FROM sys.objects ORDER BY SchemaName + ''; -- wrong
MENYUSUN collation_name
Menentukan bahwa ORDER BY operasi harus dilakukan sesuai dengan kolase yang Anda tentukan dalam collation_name, dan tidak sesuai dengan kolase kolom seperti yang ditentukan dalam tabel atau tampilan.
collation_name dapat berupa nama kolase Windows atau nama kolase SQL. Untuk informasi selengkapnya, lihat Dukungan Collation dan Unicode.
COLLATEhanya berlaku untuk kolom jenis karakter, varchar, nchar, dan nvarchar.
ASC | DESC
Menentukan bahwa nilai dalam kolom tertentu harus diurutkan dalam urutan naik atau turun.
ASC mengurutkan dari nilai terendah ke nilai tertinggi.
DESC mengurutkan dari nilai tertinggi ke nilai terendah.
ASC adalah urutan sortir default.
NULL nilai diperlakukan sebagai nilai serendah mungkin.
OFFSET { integer_constant | offset_row_count_expression } { ROW | BARIS }
Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru, Azure SQL Database, dan Azure SQL Managed Instance.
Menentukan jumlah baris yang akan dilewati sebelum kueri mulai mengembalikan baris dari ekspresi kueri. Nilai dapat berupa konstanta bilangan bulat atau ekspresi yang lebih besar dari atau sama dengan nol.
offset_row_count_expression dapat berupa variabel, parameter, atau subkueri skalar konstan. Saat Anda menggunakan subkueri, subkueri tidak dapat mereferensikan kolom apa pun yang ditentukan dalam cakupan kueri luar. Artinya, itu tidak dapat dikorelasikan dengan kueri luar.
ROW dan ROWS merupakan sinonim dan disediakan untuk kompatibilitas ANSI.
Dalam rencana eksekusi kueri, nilai jumlah baris offset muncul di atribut TOPOffset operator kueri.
AMBIL { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | BARIS } SAJA
Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru, Azure SQL Database, dan Azure SQL Managed Instance.
Menentukan jumlah baris yang akan dikembalikan setelah OFFSET klausul diproses. Nilai dapat berupa konstanta bilangan bulat atau ekspresi yang lebih besar dari atau sama dengan konstanta bilangan bulat.
fetch_row_count_expression dapat berupa variabel, parameter, atau subkueri skalar konstan. Saat Anda menggunakan subkueri, subkueri tidak dapat mereferensikan kolom apa pun yang ditentukan dalam cakupan kueri luar. Artinya, itu tidak dapat dikorelasikan dengan kueri luar.
FIRST dan NEXT merupakan sinonim dan disediakan untuk kompatibilitas ANSI.
ROW dan ROWS merupakan sinonim dan disediakan untuk kompatibilitas ANSI.
Dalam rencana eksekusi kueri, nilai jumlah baris offset muncul di atribut Baris atau Teratas dari TOP operator kueri.
Praktik terbaik
Hindari menentukan bilangan bulat dalam ORDER BY klausa sebagai representasi posisi kolom dalam daftar pilih. Misalnya, meskipun pernyataan seperti SELECT ProductID, Name FROM Production.Production ORDER BY 2 valid, pengguna mungkin merasa sulit untuk memahami dibandingkan dengan menentukan nama kolom aktual. Selain itu, perubahan pada daftar pemilihan, seperti mengubah urutan kolom atau menambahkan kolom baru, memerlukan modifikasi ORDER BY klausul untuk menghindari hasil yang tidak terduga.
Dalam pernyataan SELECT TOP (<n>) , selalu gunakan klausa ORDER BY . Ini adalah satu-satunya cara untuk secara terprediksi menunjukkan baris TOP mana yang terpengaruh. Untuk informasi selengkapnya, lihat TOP.
Interoperability
Saat Anda menggunakan ORDER BY dengan SELECT...INTO pernyataan atau INSERT...SELECT untuk menyisipkan baris dari sumber lain, ORDER BY klausa tidak menjamin baris disisipkan dalam urutan yang ditentukan.
Menggunakan OFFSET dan FETCH dalam tampilan tidak mengubah properti pembaruan tampilan.
Limitations
Tidak ada batasan jumlah kolom dalam ORDER BY klausa. Namun, ukuran total kolom yang ditentukan dalam ORDER BY klausul tidak boleh melebihi 8.060 byte.
Anda tidak dapat menggunakan kolom jenis ntext, teks, gambar, geografi, geometri, atau xml dalam ORDER BY klausa.
Anda tidak dapat menentukan bilangan bulat atau konstanta saat order_by_expression muncul dalam fungsi peringkat. Untuk informasi selengkapnya, lihat klausa SELECT - OVER.
Jika Anda alias nama tabel dalam FROM klausa, Anda harus menggunakan nama alias untuk memenuhi syarat kolomnya dalam ORDER BY klausa.
SELECT Jika pernyataan berisi salah satu klausa atau operator berikut, Anda harus menentukan nama kolom dan alias yang ditentukan dalam ORDER BY klausa dalam daftar pilih:
-
UNIONpengoperasi -
EXCEPTpengoperasi -
INTERSECTpengoperasi SELECT DISTINCT
Selain itu, ketika pernyataan menyertakan UNIONoperator , EXCEPT, atau INTERSECT , pilih daftar kueri pertama (sisi kiri) harus menentukan nama kolom atau alias kolom.
Dalam kueri yang menggunakan UNIONoperator , EXCEPT, atau INTERSECT , Anda hanya bisa menggunakan ORDER BY di akhir pernyataan. Pembatasan ini hanya berlaku untuk saat Anda menentukan UNION, , EXCEPTdan INTERSECT dalam kueri tingkat atas dan bukan dalam subkueri. Lihat bagian Contoh .
Klausa ORDER BY tidak valid dalam tampilan, fungsi sebaris, tabel turunan, dan subkueri, kecuali Anda juga menentukan TOP klausa atau OFFSET dan FETCH . Saat Anda menggunakan ORDER BY dalam objek ini, klausa hanya digunakan untuk menentukan baris yang dikembalikan oleh TOP klausa atau OFFSET dan FETCH klausa. Klausa ORDER BY tidak menjamin hasil yang diurutkan ketika konstruksi ini dikueri, kecuali ORDER BY juga ditentukan dalam kueri itu sendiri.
OFFSET dan FETCH tidak didukung dalam tampilan terindeks atau dalam tampilan yang ditentukan dengan menggunakan CHECK OPTION klausa.
OFFSET dan FETCH dapat digunakan dalam kueri apa pun yang memungkinkan TOP dan ORDER BY dengan batasan berikut:
Klausa
OVERtidak mendukungOFFSETdanFETCH.Anda tidak dapat menentukan
OFFSETdan langsung dalamINSERTpernyataan ,UPDATE,MERGE, danDELETE, tetapi Anda dapat menentukannya dalam subkueri yang ditentukanFETCHdalam pernyataan ini. Misalnya, dalamINSERT INTO SELECTpernyataan, Anda dapat menentukanOFFSETdanFETCHdalamSELECTpernyataan.Dalam kueri yang menggunakan
UNIONoperator ,EXCEPTatauINTERSECT, hanya kueri akhir yang menentukan urutan hasil kueri yang dapat menentukanOFFSETdanFETCH.Anda tidak dapat menggabungkan
TOPdenganOFFSETdanFETCHdalam ekspresi kueri yang sama (dalam cakupan kueri yang sama).
Gunakan OFFSET dan FETCH untuk membatasi baris yang dikembalikan
OFFSET Gunakan klausa dan FETCH alih-alih TOP klausul untuk menerapkan solusi penomoran halaman kueri dan membatasi jumlah baris yang dikirim ke aplikasi klien.
Menggunakan OFFSET dan FETCH sebagai solusi halaman mengharuskan menjalankan kueri satu kali untuk setiap halaman data yang dikembalikan ke aplikasi klien. Misalnya, untuk mengembalikan hasil kueri dalam kenaikan 10 baris, Anda harus menjalankan kueri satu kali untuk mengembalikan baris 1 hingga 10 lalu menjalankan kueri lagi untuk mengembalikan baris 11 hingga 20, dan seterusnya. Setiap kueri bersifat independen dan tidak terkait satu sama lain dengan cara apa pun. Kondisi ini berarti bahwa, tidak seperti menggunakan kursor di mana kueri dijalankan sekali dan status dipertahankan di server, aplikasi klien bertanggung jawab untuk melacak status. Untuk mencapai hasil yang stabil antara permintaan kueri menggunakan OFFSET dan FETCH, kondisi berikut harus dipenuhi:
Data yang mendasar yang digunakan kueri tidak berubah. Artinya, kueri tidak memperbarui baris, atau semua permintaan halaman dari kueri dijalankan dalam satu transaksi menggunakan snapshot atau isolasi transaksi yang dapat diserialisasikan. Untuk informasi selengkapnya tentang tingkat isolasi transaksi ini, lihat MENGATUR TINGKAT ISOLASI TRANSAKSI.
Klausa
ORDER BYberisi kolom atau kombinasi kolom yang dijamin unik.
Lihat contoh Jalankan beberapa kueri dalam satu transaksi di bagian Contoh .
Jika rencana eksekusi yang konsisten penting dalam solusi halaman Anda, pertimbangkan untuk menggunakan OPTIMIZE FOR petunjuk kueri untuk OFFSET parameter dan FETCH . Lihat Menentukan ekspresi untuk nilai OFFSET dan FETCH di bagian Contoh . Untuk informasi selengkapnya tentang OPTIMIZE FOR, lihat Petunjuk kueri.
Examples
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
| Category | Elemen sintaksis unggulan |
|---|---|
| Sintaks dasar | ORDER BY |
| Tentukan urutan naik dan turun |
DESC atau ASC |
| Tentukan kolajek | COLLATE |
| Tentukan urutan bersyarah |
CASE ekspresi |
| Menggunakan ORDER BY dalam fungsi peringkat | Fungsi pemberian peringkat |
| Membatasi jumlah baris yang dikembalikan |
OFFSET dan FETCH |
| Gunakan ORDER BY dengan UNION, EXCEPT, dan INTERSECT | UNION |
Sintaks dasar
Contoh di bagian ini menunjukkan fungsionalitas ORDER BY dasar klausa menggunakan sintaks minimum yang diperlukan.
A. Tentukan satu kolom yang ditentukan dalam daftar pilih
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom numerik ProductID . Karena Anda tidak menentukan urutan pengurutan, kueri menggunakan urutan naik default.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;
B. Tentukan kolom yang tidak ditentukan dalam daftar pilih
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom yang tidak disertakan oleh daftar pemilihan, tetapi FROM klausa menentukan tabel yang berisi kolom.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name,
Color
FROM Production.Product
ORDER BY ListPrice;
C. Tentukan alias sebagai kolom pengurutan
Contoh berikut menentukan alias SchemaName kolom sebagai kolom urutan pengurutan.
USE AdventureWorks2025;
GO
SELECT name,
SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;
D. Tentukan ekspresi sebagai kolom pengurutan
Contoh berikut menggunakan ekspresi sebagai kolom pengurutan. Ekspresi didefinisikan dengan menggunakan DATEPART fungsi untuk mengurutkan hasil yang ditetapkan menurut tahun di mana karyawan dipekerjakan.
USE AdventureWorks2025;
GO
SELECT BusinessEntityID,
JobTitle,
HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);
Tentukan urutan urutan naik dan turun
A. Tentukan urutan turun
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom ProductID numerik dalam urutan turun.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;
B. Tentukan urutan naik
Contoh berikut mengurutkan hasil yang ditetapkan oleh Name kolom dalam urutan naik. Karakter diurutkan menurut abjad, bukan numerik. Artinya, 10 sortir sebelum 2.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC;
C. Tentukan urutan naik dan turun
Contoh berikut mengurutkan hasil yang ditetapkan oleh dua kolom. Kumpulan hasil kueri pertama-tama diurutkan dalam urutan naik menurut FirstName kolom lalu diurutkan dalam urutan turun menurut LastName kolom.
USE AdventureWorks2025;
GO
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC;
Tentukan kolajek
Contoh berikut menunjukkan cara menentukan kolase dalam ORDER BY klausul dapat mengubah urutan hasil kueri dikembalikan. Tabel dibuat yang berisi kolom yang ditentukan dengan menggunakan kolatasi yang tidak peka huruf besar/kecil dan tidak peka huruf besar/kecil. Nilai disisipkan dengan berbagai perbedaan huruf besar/kecil dan aksen. Karena kolatasi tidak ditentukan dalam ORDER BY klausa, kueri pertama menggunakan kolatasi kolom saat mengurutkan nilai. Di kueri kedua, kolase peka huruf besar/kecil dan peka huruf besar/kecil ditentukan dalam ORDER BY klausa, yang mengubah urutan di mana baris dikembalikan.
USE tempdb;
GO
CREATE TABLE #t1
(
name NVARCHAR (15) COLLATE Latin1_General_CI_AI
);
INSERT INTO #t1
VALUES (N'Sánchez'),
(N'Sanchez'),
(N'sánchez'),
(N'sanchez');
-- This query uses the collation specified for the column 'name' for sorting.
SELECT name
FROM #t1
ORDER BY name;
-- This query uses the collation specified in the ORDER BY clause for sorting.
SELECT name
FROM #t1
ORDER BY name COLLATE Latin1_General_CS_AS;
Tentukan urutan bersyarah
Contoh berikut menggunakan CASE ekspresi dalam ORDER BY klausul untuk menentukan urutan baris secara kondisional berdasarkan nilai kolom tertentu. Dalam contoh pertama, nilai dalam SalariedFlag kolom HumanResources.Employee tabel dievaluasi. Karyawan yang memiliki SalariedFlag set ke 1 dikembalikan dalam BusinessEntityID urutan menurut. Karyawan yang memiliki SalariedFlag set ke 0 dikembalikan dalam urutan BusinessEntityID naik. Dalam contoh kedua, tataan hasil diurutkan menurut kolom TerritoryName saat kolom CountryRegionName sama dengan 'Amerika Serikat' dan untuk CountryRegionName semua baris lainnya.
SELECT BusinessEntityID,
SalariedFlag
FROM HumanResources.Employee
ORDER BY
CASE SalariedFlag
WHEN 1 THEN BusinessEntityID
END DESC,
CASE
WHEN SalariedFlag = 0 THEN BusinessEntityID
END;
SELECT BusinessEntityID,
LastName,
TerritoryName,
CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY
CASE CountryRegionName
WHEN 'United States' THEN TerritoryName ELSE CountryRegionName
END;
Menggunakan ORDER BY dalam fungsi peringkat
Contoh berikut menggunakan klausul dalam fungsi ORDER BYperingkat , , ROW_NUMBERRANK, dan DENSE_RANK.NTILE
USE AdventureWorks2025;
GO
SELECT p.FirstName,
p.LastName,
ROW_NUMBER() OVER (ORDER BY a.PostalCode) AS "Row Number",
RANK() OVER (ORDER BY a.PostalCode) AS "Rank",
DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank",
NTILE(4) OVER (ORDER BY a.PostalCode) AS "Quartile",
s.SalesYTD,
a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
Membatasi jumlah baris yang dikembalikan
Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru, Azure SQL Database, dan Azure SQL Managed Instance.
Contoh berikut menggunakan OFFSET dan FETCH untuk membatasi jumlah baris yang dikembalikan oleh kueri.
A. Tentukan konstanta bilangan bulat untuk nilai OFFSET dan FETCH
Contoh berikut menentukan konstanta bilangan bulat sebagai nilai untuk OFFSET klausa dan FETCH . Kueri pertama mengembalikan semua baris yang diurutkan menurut kolom DepartmentID. Bandingkan hasil yang dikembalikan oleh kueri ini dengan hasil dua kueri yang mengikutinya. Kueri berikutnya menggunakan klausa OFFSET 5 ROWS untuk melewati lima baris pertama dan mengembalikan semua baris yang tersisa. Kueri akhir menggunakan klausa OFFSET 0 ROWS untuk memulai dengan baris pertama lalu menggunakan FETCH NEXT 10 ROWS ONLY untuk membatasi baris yang dikembalikan ke 10 baris dari kumpulan hasil yang diurutkan.
USE AdventureWorks2025;
GO
-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;
-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;
-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;
B. Tentukan variabel untuk nilai OFFSET dan FETCH
Contoh berikut mendeklarasikan variabel @RowsToSkip dan @FetchRows dan menentukan variabel ini dalam OFFSET klausa dan FETCH .
USE AdventureWorks2025;
GO
-- Specifying variables for OFFSET and FETCH values
DECLARE @RowsToSkip AS TINYINT = 2,
@FetchRows AS TINYINT = 8;
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;
C. Tentukan ekspresi untuk nilai OFFSET dan FETCH
Contoh berikut menggunakan ekspresi @StartingRowNumber - 1 untuk menentukan OFFSET nilai dan ekspresi @EndingRowNumber - @StartingRowNumber + 1 untuk menentukan FETCH nilai. Selain itu, petunjuk kueri, OPTIMIZE FOR, ditentukan. Gunakan petunjuk ini untuk memberikan nilai tertentu untuk variabel lokal saat kueri dikompilasi dan dioptimalkan. Nilai hanya digunakan selama pengoptimalan kueri, dan bukan selama eksekusi kueri. Untuk informasi selengkapnya, lihat Petunjuk kueri.
USE AdventureWorks2025;
GO
-- Specifying expressions for OFFSET and FETCH values
DECLARE @StartingRowNumber AS TINYINT = 1,
@EndingRowNumber AS TINYINT = 8;
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @EndingRowNumber - @StartingRowNumber + 1 ROWS ONLY
OPTION (OPTIMIZE FOR (@StartingRowNumber = 1, @EndingRowNumber = 20));
D. Tentukan subkueri skalar konstan untuk nilai OFFSET dan FETCH
Contoh berikut menggunakan subkueri skalar konstan untuk menentukan nilai klausa FETCH . Subkueri mengembalikan satu nilai dari kolom PageSize dalam tabel dbo.AppSettings.
-- Specifying a constant scalar subquery
USE AdventureWorks2025;
GO
CREATE TABLE dbo.AppSettings
(
AppSettingID INT NOT NULL,
PageSize INT NOT NULL
);
INSERT INTO dbo.AppSettings
VALUES (1, 10);
DECLARE @StartingRowNumber AS TINYINT = 1;
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC
OFFSET @StartingRowNumber ROWS
FETCH NEXT (SELECT PageSize
FROM dbo.AppSettings
WHERE AppSettingID = 1) ROWS ONLY;
E. Menjalankan beberapa kueri dalam satu transaksi
Contoh berikut menunjukkan satu metode penerapan solusi halaman yang memastikan hasil yang stabil dikembalikan di semua permintaan dari kueri. Kueri dijalankan dalam satu transaksi menggunakan tingkat isolasi rekam jepret, dan kolom yang ditentukan dalam ORDER BY klausul memastikan keunikan kolom.
USE AdventureWorks2025;
GO
-- Ensure the database can support the snapshot isolation level set for the query.
IF (SELECT snapshot_isolation_state
FROM sys.databases
WHERE name = N'AdventureWorks2025') = 0
ALTER DATABASE AdventureWorks2025
SET ALLOW_SNAPSHOT_ISOLATION ON;
-- Set the transaction isolation level to SNAPSHOT for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
-- Beginning the transaction.
BEGIN TRANSACTION;
-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE @StartingRowNumber AS INT = 1,
@RowCountPerPage AS INT = 3;
-- Create the condition to stop the transaction after all rows have been returned.
WHILE (SELECT COUNT(*)
FROM HumanResources.Department) >= @StartingRowNumber
BEGIN
-- Run the query until the stop condition is met.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @RowCountPerPage ROWS ONLY;
-- Increment @StartingRowNumber value.
SET @StartingRowNumber = @StartingRowNumber + @RowCountPerPage;
CONTINUE;
END
COMMIT TRANSACTION;
Gunakan ORDER BY dengan UNION, EXCEPT, dan INTERSECT
Saat kueri menggunakan UNIONoperator , EXCEPT, atau INTERSECT , tentukan ORDER BY klausul di akhir pernyataan. Kueri mengurutkan hasil kueri gabungan. Contoh berikut mengembalikan semua produk yang berwarna merah atau kuning dan mengurutkan daftar gabungan ini menurut kolom ListPrice.
USE AdventureWorks2025;
GO
SELECT Name,
Color,
ListPrice
FROM Production.Product
WHERE Color = 'Red' -- ORDER BY cannot be specified here.
UNION ALL
SELECT Name,
Color,
ListPrice
FROM Production.Product
WHERE Color = 'Yellow'
ORDER BY ListPrice ASC;
Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)
Contoh berikut menunjukkan pengurutan hasil yang ditetapkan oleh kolom numerik EmployeeKey dalam urutan naik.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom numerik EmployeeKey dalam urutan turun.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;
Contoh berikut mengurutkan hasil yang ditetapkan oleh LastName kolom.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;
Contoh berikut mengurutkan menurut dua kolom. Kueri ini pertama-tama mengurutkan dalam urutan naik menurut FirstName kolom, lalu mengurutkan nilai umum FirstName dalam urutan turun menurut LastName kolom.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;