Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Mengembalikan Hasil Kueri sebagai Daftar Dipisahkan Koma di SQL Server – STRING_AGG()

Dimulai dengan SQL Server 2017, Anda sekarang dapat membuat hasil kueri Anda muncul sebagai daftar. Ini berarti Anda dapat membuat kumpulan hasil Anda muncul sebagai daftar yang dipisahkan koma, daftar yang dipisahkan spasi, atau pemisah apa pun yang Anda pilih untuk digunakan.

Meskipun benar bahwa Anda dapat mencapai efek yang sama sebelum SQL Server 2017, itu sedikit rumit.

Transact-SQL sekarang memiliki STRING_AGG() fungsi, yang menggabungkan nilai-nilai ekspresi string dan menempatkan nilai pemisah di antara mereka. Ini bekerja dengan cara yang hampir sama dengan GROUP_CONCAT() MySQL fungsi.

Artikel ini memberikan contoh yang mendemonstrasikan STRING_AGG() T T-SQL fungsi.

Contoh Data

Pertama, ini beberapa contoh datanya.

SELECT TaskId, TaskName 
FROM Tasks;

Hasil:

TaskId  TaskName    
------  ------------
1       Feed cats   
2       Water dog   
3       Feed garden 
4       Paint carpet
5       Clean roof  
6       Feed cats   

Contoh – Daftar Dipisahkan Koma

Jadi kita bisa mengambil data di atas, dan menggunakan STRING_AGG() berfungsi untuk membuat daftar semua nama tugas dalam satu daftar besar yang dipisahkan koma.

Seperti ini:

SELECT STRING_AGG(TaskName, ', ') 
FROM Tasks;

Hasil:

Feed cats, Water dog, Feed garden, Paint carpet, Clean roof, Feed cats   

Tentu saja, tidak perlu dipisahkan dengan koma. Itu dapat dipisahkan dengan ekspresi apa pun dari NVARCHAR atau VARCHAR ketik, dan bisa berupa literal atau variabel.

Contoh – Menggabungkan Kolom

Kita juga bisa menggunakan CONCAT() berfungsi untuk menggabungkan dua bidang bersama-sama, dipisahkan oleh pemisahnya sendiri.

Contoh:

SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ') 
FROM Tasks;

Hasil:

1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats

Contoh – Nilai Null

Jika kumpulan hasil Anda berisi nilai nol, nilai tersebut akan diabaikan dan pemisah yang sesuai tidak ditambahkan.

Jika ini tidak sesuai, Anda dapat memberikan nilai untuk nilai null dengan menggunakan ISNULL() fungsi dan meneruskan nilai yang ingin Anda gunakan setiap kali nilai nol ditemukan. Melakukan hal ini memastikan bahwa Anda masih mendapatkan hasil saat baris berisi nilai nol.

Misalnya, pertimbangkan kueri dan kumpulan hasil berikut:

SELECT TaskCode 
FROM Tasks;

Hasil:

TaskCode
--------
cat123  
null    
null    
pnt456  
rof789  
null    

Kita dapat melihat bahwa ada tiga nilai nol dalam kumpulan hasil.

Jika kita menjalankan ini melalui STRING_AGG() fungsi, kita mendapatkan ini:

SELECT STRING_AGG(TaskCode, ', ') 
FROM Tasks;

Hasil:

cat123, pnt456, rof789

Namun, jika kita menggunakan ISNULL() fungsi untuk menyediakan placeholder untuk nilai nol apa pun, kami mendapatkan ini:

SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') 
FROM Tasks;

Hasil:

cat123, N/A, N/A, pnt456, rof789, N/A

Contoh – Hasil yang Dikelompokkan

Anda juga dapat menggunakan STRING_AGG() berfungsi saat mengelompokkan set hasil Anda. Misalnya, Anda mungkin ingin daftar album yang dikelompokkan menurut artis.

Untuk mendemonstrasikan ini, bayangkan sebuah database dengan dua tabel; Artists dan Albums . Ada hubungan satu ke banyak antara tabel-tabel ini. Untuk setiap artis, mungkin ada banyak album.

Jadi kueri biasa yang menggabungkan kedua tabel mungkin terlihat seperti ini:

USE Music;
SELECT ar.ArtistName,
	al.AlbumName
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId;

Hasil:

ArtistName                 AlbumName               
-------------------------  ------------------------
Iron Maiden                Powerslave              
AC/DC                      Powerage                
Jim Reeves                 Singing Down the Lane   
Devin Townsend             Ziltoid the Omniscient  
Devin Townsend             Casualties of Cool      
Devin Townsend             Epicloud                
Iron Maiden                Somewhere in Time       
Iron Maiden                Piece of Mind           
Iron Maiden                Killers                 
Iron Maiden                No Prayer for the Dying 
The Script                 No Sound Without Silence
Buddy Rich                 Big Swing Face          
Michael Learns to Rock     Blue Night              
Michael Learns to Rock     Eternity                
Michael Learns to Rock     Scandinavia             
Tom Jones                  Long Lost Suitcase      
Tom Jones                  Praise and Blame        
Tom Jones                  Along Came Jones        
Allan Holdsworth           All Night Wrong         
Allan Holdsworth           The Sixteen Men of Tain 

Seperti yang Anda lihat, jika seorang artis memiliki lebih dari satu album, nama artis tersebut akan dicantumkan beberapa kali – satu kali untuk setiap album.

Tapi kita bisa menggunakan STRING_AGG() untuk mengubahnya sehingga kami mencantumkan setiap artis hanya sekali, diikuti dengan daftar album yang dipisahkan koma yang mereka rilis:

USE Music;
SELECT ar.ArtistName,
	STRING_AGG(al.AlbumName, ', ')
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
GROUP BY ArtistName;

Hasil:

ArtistName                                                                                               
-------------------------  ------------------------------------------------------------------------------
AC/DC                      Powerage                                                                      
Allan Holdsworth           All Night Wrong, The Sixteen Men of Tain                                      
Buddy Rich                 Big Swing Face                                                                
Devin Townsend             Ziltoid the Omniscient, Casualties of Cool, Epicloud                          
Iron Maiden                Powerslave, Somewhere in Time, Piece of Mind, Killers, No Prayer for the Dying
Jim Reeves                 Singing Down the Lane                                                         
Michael Learns to Rock     Blue Night, Eternity, Scandinavia                                             
The Script                 No Sound Without Silence                                                      
Tom Jones                  Long Lost Suitcase, Praise and Blame, Along Came Jones                        

Contoh – Mengurutkan Hasil

Anda dapat menggunakan klausa pesanan untuk mengurutkan hasil dalam grup gabungan. Ini dilakukan dengan WITHIN GROUP ayat. Saat menggunakan klausa ini, Anda menentukan urutan dengan ORDER BY diikuti oleh ASC (untuk menaik) atau DESC (untuk turun).

Contoh:

USE Music;
SELECT ar.ArtistName,
	STRING_AGG(al.AlbumName, ', ') WITHIN GROUP (ORDER BY al.AlbumName DESC)
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
GROUP BY ArtistName;

Hasil:

ArtistName                                                                                               
-------------------------  ------------------------------------------------------------------------------
AC/DC                      Powerage                                                                      
Allan Holdsworth           The Sixteen Men of Tain, All Night Wrong                                      
Buddy Rich                 Big Swing Face                                                                
Devin Townsend             Ziltoid the Omniscient, Epicloud, Casualties of Cool                          
Iron Maiden                Somewhere in Time, Powerslave, Piece of Mind, No Prayer for the Dying, Killers
Jim Reeves                 Singing Down the Lane                                                         
Michael Learns to Rock     Scandinavia, Eternity, Blue Night                                             
The Script                 No Sound Without Silence                                                      
Tom Jones                  Praise and Blame, Long Lost Suitcase, Along Came Jones                        

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konsep utama penguncian SQL Server

  2. Bagaimana INTERSECT Bekerja di SQL Server

  3. mengonversi stempel waktu Epoch ke server sql (format yang dapat dibaca manusia)

  4. JSON_VALUE() Contoh di SQL Server (T-SQL)

  5. Cara Mendapatkan nilai Maks dan Min dari Tabel dengan menggunakan Fungsi Agregat - Tutorial SQL Server / TSQL Bagian 129