Rumah >pangkalan data >tutorial mysql >Bagaimana untuk menghapuskan pendua dalam fungsi string_agg SQL Server?
Fungsi STRING_AGG
SQL Server: Mengalih keluar Nilai Pendua
Artikel ini menangani cabaran untuk menghapuskan nilai pendua dalam fungsi STRING_AGG
dalam SQL Server 2017 dan versi yang lebih baru. Fungsi STRING_AGG
standard tidak menyokong kata kunci DISTINCT
secara langsung untuk pengagregatan nilai unik.
Masalahnya: Menggunakan terus DISTINCT
dengan STRING_AGG
untuk mengira dan menggabungkan nilai unik tidak mungkin.
Matlamat: Hasilkan rentetan nilai unik yang digabungkan menggunakan STRING_AGG
.
Contoh Ilustrasi:
Mari kita pertimbangkan jadual Sitings
dengan lajur State
, City
dan Siting
:
<code>ID | State | City | Siting --------------------------------- 1 | Florida | Orlando | bird 2 | Florida | Orlando | dog 3 | Arizona | Phoenix | bird 4 | Arizona | Phoenix | dog 5 | Arizona | Phoenix | bird 6 | Arizona | Phoenix | bird 7 | Arizona | Phoenix | bird 8 | Arizona | Flagstaff | dog</code>
Pertanyaan mudah menggunakan COUNT(DISTINCT Siting)
dan STRING_AGG(Siting, ',')
menghasilkan:
State | City | # Of Types | Animals |
---|---|---|---|
Arizona | Flagstaff | 1 | dog |
Florida | Orlando | 2 | dog,bird |
Arizona | Phoenix | 2 | bird,bird,bird,dog,bird |
Output yang diingini, walau bagaimanapun, harus mengalih keluar pendua daripada lajur "Haiwan" untuk Phoenix:
State | City | # Of Types | Animals |
---|---|---|---|
Arizona | Flagstaff | 1 | dog |
Florida | Orlando | 2 | dog,bird |
Arizona | Phoenix | 2 | bird,dog |
Penyelesaian: Pendekatan Dua Kumpulan
Untuk mencapai matlamat ini, kami menggunakan proses pengumpulan dua langkah dengan Ungkapan Jadual Biasa (CTE):
<code class="language-sql">WITH Sitings AS ( SELECT * FROM (VALUES (1, 'Florida', 'Orlando', 'bird'), (2, 'Florida', 'Orlando', 'dog'), (3, 'Arizona', 'Phoenix', 'bird'), (4, 'Arizona', 'Phoenix', 'dog'), (5, 'Arizona', 'Phoenix', 'bird'), (6, 'Arizona', 'Phoenix', 'bird'), (7, 'Arizona', 'Phoenix', 'bird'), (8, 'Arizona', 'Flagstaff', 'dog') ) AS F (ID, State, City, Siting) ), CTE_Animals AS ( SELECT State, City, Siting FROM Sitings GROUP BY State, City, Siting ) SELECT State, City, COUNT(1) AS [# Of Sitings], STRING_AGG(Siting,',') AS Animals FROM CTE_Animals GROUP BY State, City ORDER BY State, City;</code>
Hasilnya: Pertanyaan ini berjaya menghasilkan output yang diingini:
State | City | # Of Sitings | Animals |
---|---|---|---|
Arizona | Flagstaff | 1 | dog |
Arizona | Phoenix | 2 | bird,dog |
Florida | Orlando | 2 | dog,bird |
Teknik pengumpulan dua kali ini mula-mula mengumpulkan dengan State
, City
dan Siting
untuk menghapuskan pendua dalam setiap bandar, kemudian mengumpulkan sekali lagi dengan State
dan City
untuk menggabungkan lokasi unik.
Atas ialah kandungan terperinci Bagaimana untuk menghapuskan pendua dalam fungsi string_agg SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!