λογισμικό

Γνώση Υπολογιστών >> λογισμικό >  >> SQL Server

Υπάρχει κάποια λειτουργία στο SQL Server για να επιστρέψετε όλες τις τιμές μιας στήλης που διαχωρίζεται από κόμμα που δεν θέλετε να χρησιμοποιήσετε βρόχο ή να διακόψει τον δρομέα;

Ναι, ο SQL Server προσφέρει διάφορους τρόπους για να συγκεντρώσει όλες τις τιμές από μια στήλη σε μία μεμονωμένη συμβολοσειρά χωρίς να χρησιμοποιεί βρόχους ή δρομείς. Οι πιο αποτελεσματικές μέθοδοι γενικά περιλαμβάνουν τη χρήση `string_agg` (διαθέσιμες στο SQL Server 2017 και αργότερα) ή` για το XML Path` (λειτουργεί και σε παλαιότερες εκδόσεις).

Μέθοδος 1:Χρήση `string_agg` (sql server 2017 και αργότερα)

Αυτή είναι η απλούστερη και αποτελεσματικότερη προσέγγιση για τις σύγχρονες εκδόσεις SQL Server:

`` sql

Επιλέξτε string_agg (Yourcolumn, ',') ως concatenatedValues

Από το σας.

`` `

Αντικαταστήστε το `yourtable` και το` yourcolumn 'με τα πραγματικά ονόματα του πίνακα και της στήλης σας. Αυτό θα επιστρέψει μία σειρά με όλες τις τιμές από το `yourcolumn 'concatenen σε μια ενιαία συμβολοσειρά, χωρισμένη από κόμματα.

Μέθοδος 2:Χρήση `για τη διαδρομή XML` (SQL Server 2016 και νωρίτερα)

Για παλαιότερες εκδόσεις SQL Server, το «για το XML Path» παρέχει παρόμοια λειτουργικότητα:

`` sql

Επιλέξτε Stuff ((

Επιλέξτε ',' + Yourcolumn

Από το σας

Για τη διαδρομή XML ('')

), 1, 1, '') ως concatenatedValues.

`` `

Αυτή η μέθοδος χρησιμοποιεί ένα υποπαράγονο για να συγκρατήσει τις τιμές με κόμματα και στη συνέχεια η λειτουργία `Stuff` αφαιρεί το κορυφαίο κόμμα.

Παράδειγμα:

Ας πούμε ότι έχετε ένα τραπέζι με την ονομασία `υπαλλήλους 'με μια στήλη που ονομάζεται` Employeename`:

| Employeename |

| --- | --- |

| John Doe |

| Jane Smith |

| David Lee |

Χρησιμοποιώντας `string_agg`:

`` sql

Επιλέξτε string_agg (Employeename, ',') ως Employeenames

Από τους υπαλλήλους.

`` `

Αυτό θα επέστρεφε:

| Employeenames |

| --- | --- |

| John Doe, Jane Smith, David Lee |

Χρήση `για τη διαδρομή XML ':

`` sql

Επιλέξτε Stuff ((

Επιλέξτε ',' + Employeename

Από τους εργαζόμενους

Για τη διαδρομή XML ('')

), 1, 1, '') ως Employeenames.

`` `

Αυτό θα επέστρεφε επίσης:

| Employeenames |

| --- | --- |

| John Doe, Jane Smith, David Lee |

Σημαντικές εκτιμήσεις:

* Τιμές NULL: Και οι δύο μέθοδοι χειρίζονται τις τιμές `null 'αγνοώντας τους αποτελεσματικά. Εάν πρέπει να αντιπροσωπεύετε τις τιμές `null` στη συνολική σας συμβολοσειρά (π.χ. χρησιμοποιώντας έναν ειδικό δείκτη όπως το" null "), θα πρέπει να προσθέσετε μια δήλωση` case` εντός της συσσωμάτωσης. Για παράδειγμα, με `string_agg`:

`` sql

Επιλέξτε string_agg (περίπτωση όταν το Employeename είναι null τότε 'null' else hompaleename end ',') ως Employeenames

Από τους υπαλλήλους.

`` `

* Τύπος δεδομένων: Βεβαιωθείτε ότι ο τύπος δεδομένων της στήλης σας είναι συμβατός με τη συγκόλληση συμβολοσειρών. Εάν είναι απαραίτητο, χρησιμοποιήστε το `cast` ή` μετατρέψτε 'για να μετατρέψετε τη στήλη σε κατάλληλο τύπο δεδομένων (π.χ. `varchar').

* απόδοση: Για πολύ μεγάλα τραπέζια, το `string_agg` είναι γενικά πιο εκτεταμένο από το` για το μονοπάτι XML '.

Επιλέξτε τη μέθοδο που είναι κατάλληλη για την έκδοση SQL Server. Το `string_agg` είναι η προτιμώμενη και πιο ευανάγνωστη επιλογή εάν η έκδοση SQL Server την υποστηρίζει.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα