Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

SQL 2008R2: Bestimmte Spalte mehrerer Zeilen verketten

Frage Entwicklung Datenbanken

Mitglied: archivario

archivario (Level 1) - Jetzt verbinden

08.07.2014 um 09:44 Uhr, 5932 Aufrufe, 14 Kommentare, 1 Danke

Hallo zusammen,

nachdem ich jetzt schon Stunden verbracht habe um eine Lösung zu finden, hoffe ich auf ein erhellendes Licht in diesem Forum. Folgendes Problem habe ich:

Per SQL-View stelle ich mir aus einer Tabelle verschiedene Spalten zusammen. Bei einer Abfrage tauchen zu einer Belegnummer mehrere Treffer auf, diese beinhalten mehrere Personalnummern:

Ergebnis:

Belegnummer Personalnummer Name
12 22 Test
12 25 Test2


Als Ergebnis brauche ich jedoch folgendes:

Belegnummer Personalnummer Name
12 22 25 Test Test2


Wie gehe ich in meinem select am besten vor um hier zu verketten?

Vielen Dank
Mitglied: StefanLausL
08.07.2014 um 10:07 Uhr
Hallo,

leider finde ich gerade kein Beispiel von mir:

Google einfach mal nach: pivot for xml sql

Da ist einiges dabei.


Gruß Stefan
Bitte warten ..
Mitglied: StefanLausL
08.07.2014 um 10:15 Uhr
So hab ein Beispiel von mir gefunden:
Hier wird die Menge aller eingegangenen Belege gezählt und nach Kalenderwoche in Spalten aufgelistet:



INSERT INTO #t (
Datenbank
,Kalenderwoche
)
SELECT
Datenbank
,DATEPART(ww,b.EingegangenAm)
FROM dbo.tBeleg b (NOLOCK)


PRINT ''? rowcount: '' + LTRIM(@@ROWCOUNT)
END;'



DECLARE @command NVARCHAR(MAX)

;WITH dates AS (
SELECT DISTINCT
CONVERT(NVARCHAR(10), t.Kalenderwoche, 120) CommandDate
FROM #t t
)


SELECT @command = STUFF((
SELECT DISTINCT ', ' + '[' + d.CommandDate + ']'
FROM dates d
FOR XML PATH('')), 1, 1, ''
);


SELECT @command = '
SELECT *
FROM (
SELECT t.Datenbank
,CONVERT(NVARCHAR(10), t.Kalenderwoche, 120) CommandDate
,1 Value
FROM #t t
) t
PIVOT
(
COUNT(Value)
FOR CommandDate IN (' + @command + ')
) AS pvt
';


PRINT @command
EXEC(@command);
Bitte warten ..
Mitglied: LianenSchwinger
08.07.2014, aktualisiert um 12:37 Uhr
Hallo archivario,

versuch es mal mit folgendem Code, wobei TableName Dein View ist.

01.
SELECT Belegnummer,  
02.
       STUFF((SELECT DISTINCT ' '+ Personalnummer  
03.
              FROM TableName a  
04.
              WHERE b.Belegnummer = a.Belegnummer FOR XML PATH('')),1 ,1, '')  Personalnummern, 
05.
       STUFF((SELECT DISTINCT  ' '+ Name  
06.
              FROM TableName a  
07.
              WHERE b.Belegnummer = a.Belegnummer FOR XML PATH('')),1 ,1, '')  Namen, 
08.
FROM TableName b 
09.
GROUP BY Belegnummer;
G Jörg
Bitte warten ..
Mitglied: archivario
10.07.2014 um 09:47 Uhr
Hi LianenSchwinger,

habe Deinen Vorschlag mal getestet aber leider ohne Erfolg, hier der original Aufruf:

SELECT belegnr,
STUFF((SELECT DISTINCT ' '+ persnr
FROM [test].[dbo].[Material_Stundennachweis] a
WHERE b.belegnr = a.belegnr FOR XML PATH('')),1 ,1, '') Personalnummern,
STUFF((SELECT DISTINCT ' '+ periode
FROM FROM [test].[dbo].[Material_Stundennachweis] a
WHERE b.belegnr = a.belegnr FOR XML PATH('')),1 ,1, '') Perioden,
FROM [test].[dbo].[Material_Stundennachweis] b
GROUP BY belegnr;


Ergebnis:

Meldung 156, Ebene 15, Status 1, Zeile 9
Falsche Syntax in der Nähe des FROM-Schlüsselworts.

Was mache ich falsch?
Bitte warten ..
Mitglied: Biber
10.07.2014 um 11:36 Uhr
Moin archivario,

TOM TOM gibt es.
FROM FROM nicht.

Grüße
Biber
Bitte warten ..
Mitglied: LianenSchwinger
10.07.2014 um 12:22 Uhr
Hallo Biber,

wollte ich auch grad drauf hinweisen.

01.
SELECT belegnr,  
02.
       STUFF((SELECT DISTINCT ' ' + a.persnr  
03.
              FROM [test].[dbo].[Material_Stundennachweis] a  
04.
              WHERE b.belegnr = a.belegnr FOR XML PATH('')), 1 , 1, '') Personalnummern, 
05.
       STUFF((SELECT DISTINCT ' ' + a.periode  
06.
              FROM [test].[dbo].[Material_Stundennachweis] a  
07.
              WHERE b.belegnr = a.belegnr FOR XML PATH('')), 1 , 1, '') Perioden, 
08.
FROM [test].[dbo].[Material_Stundennachweis] b 
09.
GROUP BY belegnr;
Müsste laufen.

G LianenSchwinger
Bitte warten ..
Mitglied: archivario
10.07.2014 um 12:35 Uhr
hi bieber,

danke für den Hinweis, ist beim kopieren passiert. Leider ist der Fehler noch der selbe....


gruß
archivario
Bitte warten ..
Mitglied: archivario
10.07.2014 um 12:41 Uhr
Hi LianenSchwinger,

unabhängig von dem doppelten FROM bekomme ich die identische Fehlermeldung, stört sich an der Zeile 8.

Hast Du noch eine Idee?

Gruß und danke
Bitte warten ..
Mitglied: LianenSchwinger
10.07.2014 um 12:44 Uhr
... ja das Komma hinter Perioden muss noch weg. Hatte ich auch übersehen.

G LianenSchwinger
Bitte warten ..
Mitglied: archivario
10.07.2014 um 13:13 Uhr
leider immer noch die gleiche Fehlermeldung
Bitte warten ..
Mitglied: LianenSchwinger
10.07.2014, aktualisiert um 13:22 Uhr
mmh, dann weiß ich im Moment auch nichts mehr ... folgendes funktioniert also nicht?

SELECT b.belegnr,
STUFF((SELECT DISTINCT ' ' + a.persnr
FROM [test].[dbo].[Material_Stundennachweis] a
WHERE b.belegnr = a.belegnr FOR XML PATH('')), 1 , 1, '') Personalnummern,
STUFF((SELECT DISTINCT ' ' + a.periode
FROM [test].[dbo].[Material_Stundennachweis] a
WHERE b.belegnr = a.belegnr FOR XML PATH('')), 1 , 1, '') Perioden
FROM [test].[dbo].[Material_Stundennachweis] b
GROUP BY belegnr;

Ich komme aus der Oracle-Welt daher ist mein MS-SQL nicht so dolle.
Habe auch gerade keine Möglichkeit auf unserem SQL-Server 2012 das zu testen.

Die Schreibweise [test].[dbo].[Material_Stundennachweis] ist aber korrekt? Oder will MS-SQL ein AS vor Personalnummer und Perioden?

G LianenSchwinger
Bitte warten ..
Mitglied: StefanLausL
10.07.2014 um 13:45 Uhr
Hast du meinen Vorschlag auch mal probiert ?
Der funktioniert 100% ig.
Musst hat nur auf Deine Bedürfnisse anpassen.

Oder hab ich was an Deiner Frage Missverstanden ?
Bitte warten ..
Mitglied: archivario
10.07.2014 um 13:50 Uhr
das war es, AS fehlte, jetzt kommt auch ein Ergebnis, zwar ein überraschendes aber es kommt.

Er schneidet alles auf 5 Zeichen zusammen..

Vielleicht kannst Du mir den Aufruf mit wenigen Sätzen erklären?

Gruß

archivario
Bitte warten ..
Mitglied: archivario
10.07.2014 um 13:55 Uhr
Hi StefanLausL,

ehrlich gesagt war ich damit überfordert, habe versucht den Ablauf zu verstehen aber das fällt mir ziemlich schwer.
Ich kratze immer nur an der Oberfläche von SQL und das hat bisher gereicht...

Gruß

archivario
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL Zeilen Verketten
Frage von JK23JKDatenbanken10 Kommentare

Hallo zusammen, vermutlich eine simple Übung für einige von euch aber ich stehe irgendwie auf dem Schlauch. Es geht ...

Datenbanken
MS SQL Server 2012 Texte aus mehreren Zeilen in einer Zeile gruppieren verketten
gelöst Frage von gigi300885Datenbanken3 Kommentare

Hallo zusammen, Habe nach einer Abfrage folgenden Output: (z.b. Select sendung,niederlassung from sendung group by sendung,niederlassung order by datum) ...

Datenbanken
SQL - Mehrere Tabellen über JOINS verketten
Frage von GwahlersDatenbanken1 Kommentar

Aktuell habe ich das Problem dass die Ausgabe von meinen Erwartungen abweicht JOINS und Tabellen im Anhang Folgende Abfrage ...

Datenbanken
MS SQL View - Zeile in Spalte
Frage von StfnCstrDatenbanken1 Kommentar

Hallo Zusammen, folgende View habe ich erstellt und folgendes Ergebnis bekommen. Leider brauche ich die Rufnummernart in einer Spalte, ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 5 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 7 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...