Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 4777 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Server
gelöst MS SQL Server 2014 unter Windows Server 2008R2 (2)

Frage von bootnix zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...