SQL-Funktion zum Zusammenführen eines Feldes

SQL-Funktion zum Zusammenführen eines Feldes

Vor kurzem musste ich alle Felder einer verknüpften Tabelle abfragen und in einem Feld neu gruppieren. Zu diesem Zeitpunkt kann eine normale Join-Abfrage die Anforderungen nicht erfüllen. Um sie zu erfüllen, ist eine SQL-Funktion erforderlich:

ALTER-Funktion dbo.getResCodesByOwnerId(@OwnerId INT)
gibt nvarchar(2000) zurück
als
beginnen
DECLARE @codes VARCHAR(2000)
Setzen Sie @codes=''
Wählen Sie @codes=stuff((Wählen Sie ','+residence_code von crm_owner co left, verbinden Sie crm_owner_residence cor auf co.id=cor.owner_id, wobei co.id=@OwnerId für XML-Pfad('')),1,1,'')
@Codes zurückgeben
ENDE

Nehmen Sie zum Testen die Daten mit der ID = 2 und erhalten Sie das Ergebnis:

Wählen Sie (Datenbankname).getResCodesByOwnerId(fr.owner_id) als Zimmercode
von t1 fr links zu t2 frd auf fr.owner_id=frd.owner_id

Ergebnis:

1101010105,11GU002,1101010104

Ergänzung: SQL STUFF Funktion verkettet Strings

Heute habe ich einen Artikel über Parallelität gesehen. Ich habe ihn auch studiert und er war ziemlich gut.

Will diesen Effekt.

Tabelle tb erstellen(idint, Wert varchar(10))
einfügen in tbvalues(1,'aa')
einfügen in tbvalues(1,'bb')
einfügen in tbvalues(2,'aaa')
einfügen in tbvalues(2,'bbb')
einfügen in tbvalues(2,'ccc')
gehen
 
/* Zeug(Param1, Startindex, Länge, Param2)

Beschreibung: Löschen Sie beginnend bei startIndex (SQL beginnt bei 1, nicht bei 0) Längenzeichen aus param1 und ersetzen Sie dann die gelöschten Zeichen durch param2. */

SELECT-ID,
           Wert = Zeug
             ((SELECT ',' + Wert
               VON tb ALS t
               WO t .id = tb.id FÜR XML-Pfad('')), 1, 1, '')
VON tb
GROUP BY-ID

Das ist es.

Erfasste Informationen

/* 
Titel: Einer der durch ein Feld zusammengeführten Strings (einfache Zusammenführung) 
Autor: (Nach 18 Jahren Wind und Regen blüht der Schneelotus auf dem Eisberg) 
Standort: Shenzhen, Guangdong. Beschreibung: Fügen Sie die folgenden Daten entsprechend dem ID-Feld in das Wertefeld ein. 
ID-Wert 
----- ------  
1aa 
1 bb 
2 aaa 
2 bbb 
2 ccc 
Sie müssen das Ergebnis erhalten: 
ID-Wert 
------ -----------  
1 aa,bb 
2 aaa, bbb, ccc 
Das heißt: nach ID gruppieren, Summe der Werte ermitteln (String-Addition) 
*/ 
--1. In SQL2000 können Sie nur benutzerdefinierte Funktionen verwenden, um die Aufgabe „create table tb(id int, value varchar(10))“ zu lösen. 
in tb-Werte einfügen (1, 'aa') 
in tb-Werte einfügen (1, 'bb') 
in tb-Werte einfügen (2, „aaa“) 
in tb-Werte einfügen (2, 'bbb') 
in tb-Werte einfügen (2, „ccc“) 
gehen 
 
Funktion erstellen dbo.f_str(@id varchar(10)) gibt varchar(1000) zurück 
als 
beginnen 
 Deklarieren Sie @str varchar(1000) 
 Wählen Sie @str = isnull(@str + ',' , '') + cast(Wert als varchar) aus tb, wobei id = @id 
 return @str 
Ende 
gehen 
 
--Rufen Sie die Funktion „Select ID, Wert = dbo.f_str(id)“ aus der TB-Gruppe nach ID auf. 
 
Löschfunktion dbo.f_str 
Drop-Tabelle tb  
 
--2. Methode zum Erstellen einer Tabelle tb(id int, value varchar(10)) in sql2005 
in tb-Werte einfügen (1, 'aa') 
in tb-Werte einfügen (1, 'bb') 
in tb-Werte einfügen (2, „aaa“) 
in tb-Werte einfügen (2, 'bbb') 
in tb-Werte einfügen (2, „ccc“) 
gehen  
Wählen Sie ID, [Wert] = Zeug ((Wählen Sie ',' + [Wert] von tb t, wobei ID = tb.id für XML-Pfad('')), 1, 1, '') 
von tb 
nach ID gruppieren  
Drop-Tabelle tb 
  
--3. Verwenden Sie den Cursor, um Daten zusammenzuführen. Erstellen Sie die Tabelle tb (id int, value varchar (10)). 
in tb-Werte einfügen (1, 'aa') 
in tb-Werte einfügen (1, 'bb') 
in tb-Werte einfügen (2, „aaa“) 
in tb-Werte einfügen (2, 'bbb') 
in tb-Werte einfügen (2, „ccc“) 
gehen 
deklariere @t table(id int,value varchar(100)) - definiere Ergebnismengentabellenvariable - definiere Cursor und Mergeprozess deklariere my_cursor Cursor lokal für 
wähle ID, Wert aus TB 
Deklarieren Sie @id_old int, @id int, @value varchar(10), @s varchar(100) 
öffne my_cursor 
hol my_cursor in @id , @value 
wählen Sie @id_old = @id , @s='' 
während @@FETCH_STATUS = 0 
beginnen 
  wenn @id = @id_alt 
    Wählen Sie @s = @s + ',' + Cast(@value als varchar) 
  anders 
   beginnen 
    @t-Werte einfügen(@id_old, stuff(@s,1,1,'')) 
    Wählen Sie @s = ',' + cast(@value as varchar), @id_old = @id 
   Ende 
  hol my_cursor in @id , @value 
ENDE 
@t-Werte einfügen(@id_old, stuff(@s,1,1,'')) 
schließe my_cursor 
my_cursor freigeben 
 
wähle * aus @t 
Drop-Tabelle tb

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • So teilen und führen Sie mehrere Werte in einem einzigen Feld in MySQL zusammen
  • Implementierungsschritte für MySQL-Zusammenführungsergebnisse und horizontale Spleißfelder
  • Analyse der MySQL Union Merge-Abfragedaten und der Verwendung von Tabellenalias und Feldalias
  • MySQL-Konvertierung von Spalten in Zeilen, Methode zum Zusammenführen von Feldern (unbedingt lesen)
  • Gruppenzeichenzusammenführung SQL-Anweisung führt eine der Zeichenfolgen nach einem bestimmten Feld zusammen (einfache Zusammenführung)
  • Ein Beispiel für das Zusammenführen eines Feldwertes in SQL Server
  • So führen Sie zwei Felder in MySQL zusammen

<<:  Spezifikationen für Hyperlink-Symbole: Verbessern Sie die Lesbarkeit von Artikeln

>>:  Verwendung von Docker UI, einem Docker-Visualisierungsverwaltungstool

Artikel empfehlen

So konfigurieren Sie Eureka im Docker

Heureka: 1. Erstellen Sie ein JDK-Image Starten S...

So ändern Sie die inländische Quelle von Ubuntu 20.04 apt

UPD 2020.2.26 Derzeit ist Ubuntu 20.04 LTS noch n...

So stellen Sie Tencent Cloud Server von Grund auf bereit

Da dies mein erster Beitrag ist, weisen Sie mich ...

Der Unterschied zwischen ${param} und #{param} in MySQL

Der von ${param} übergebene Parameter wird als Te...

Drei Möglichkeiten zum Teilen der Komponentenlogik in React

Ohne weitere Umschweife sind dies diese drei Meth...

Implementierung mehrerer Tomcat-Instanzen auf einer einzigen Maschine

1. Einleitung Zunächst müssen wir eine Frage bean...

Eine kurze Diskussion über einige Vorteile von Vue3

Inhaltsverzeichnis 1. Quellcode 1.1 Monorepo 1.2 ...

Tutorial zur Installation von MySQL 5.7.18 mit einem RPM-Paket

System: CentOS 7 RPM-Pakete: mysql-community-clie...

MySQL-Datenbankgrundlagen - Prinzip der Join-Operation

Join verwendet den Nested-Loop-Join-Algorithmus. ...

Analyse der Implementierung der MySQL-Anweisungssperre

Zusammenfassung: Analyse von zwei MySQL SQL-Anwei...

Erste Erkundung gängiger Befehle für Docker-Anfänger

Bevor wir Docker offiziell verwenden, machen wir ...