Rumah >pangkalan data >tutorial mysql >Bagaimana untuk menghapuskan pendua dalam fungsi string_agg SQL Server?

Bagaimana untuk menghapuskan pendua dalam fungsi string_agg SQL Server?

Patricia Arquette
Patricia Arquetteasal
2025-01-24 07:02:10588semak imbas

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.

How to Eliminate Duplicates in SQL Server's STRING_AGG Function?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn