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:
|
<<: Spezifikationen für Hyperlink-Symbole: Verbessern Sie die Lesbarkeit von Artikeln
>>: Verwendung von Docker UI, einem Docker-Visualisierungsverwaltungstool
Heureka: 1. Erstellen Sie ein JDK-Image Starten S...
Es gibt ein Heilmittel gegen Reue auf der Welt, s...
UPD 2020.2.26 Derzeit ist Ubuntu 20.04 LTS noch n...
Da dies mein erster Beitrag ist, weisen Sie mich ...
Der von ${param} übergebene Parameter wird als Te...
Frage 1: Die Schreibmethode, die einen Fehler mel...
Ohne weitere Umschweife sind dies diese drei Meth...
1. Einleitung Zunächst müssen wir eine Frage bean...
Warum habe ich das verwendet? Alles begann mit de...
Inhaltsverzeichnis 1. Quellcode 1.1 Monorepo 1.2 ...
System: CentOS 7 RPM-Pakete: mysql-community-clie...
Dieser Artikel fasst verschiedene Möglichkeiten z...
Join verwendet den Nested-Loop-Join-Algorithmus. ...
Zusammenfassung: Analyse von zwei MySQL SQL-Anwei...
Bevor wir Docker offiziell verwenden, machen wir ...