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
GELÖST

MSSQL Daten aus Zeilen in Spalten ausgeben

Frage Entwicklung Datenbanken

Mitglied: joni2000de

joni2000de (Level 1) - Jetzt verbinden

13.12.2011, aktualisiert 12:26 Uhr, 6954 Aufrufe, 3 Kommentare

Hi Admins,

ich hoffe ihr könnt mir bei meinem SQL-Problem auf die Sprünge helfen. Folgende Vorgaben:

Tabelle 1 
NR___Bezeichnung 
1___Haus1 
2___Haus2 
3___Haus3 
4___Haus4 
5___Haus5 
 
Tabelle 2 
NR___Funktion___Name 
1___2___Müller 
1___4___Maier 
3___4___Huber 
5___2___Metzler 
5___4___Gruber
Als Ergebnis hätte ich gerne:

NR___Bezeichnung___Funktion2___Funktion4 
1___Haus1___Müller___Maier 
2___Haus2___NULL___NULL 
3___Haus3___NULL___Huber 
4___Haus4___NULL___NULL 
5___Haus5___Metzler___Gruber
Was ich geschafft habe ist, x Varianten zu finden die mir die Zeilen pro Nr nicht zusammenfassen sondern folgendes Ergebnis liefern:
NR___Bezeichnung___Funktion2___Funktion4 
1___Haus1___Müller___NULL 
1___Haus1___NULL___Maier 
2___Haus2___NULL___NULL 
3___Haus3___NULL___NULL 
3___Haus3___NULL___Huber 
4___Haus4___NULL___NULL 
5___Haus5___Metzler___NULL 
5___Haus5___NULL___Gruber
Wie muss hier der Ansatz aussehen? Danke für eure Hilfe.

Gruß Joni
Mitglied: Indrador
13.12.2011 um 10:54 Uhr
Hi,

1. für die Anforderung ist dein Datenmodell mehr als nur suboptimal und generell wirkt es nicht gut überdacht, wirf mal einen Blick auf Artikel über Normalisierung in Datenbanken.
2. Falls die Attributsbezeichnungen tatsächlich so sind, sind sie eine Katastophe, es gibt sehr gute Bücher über Namenskonventionen in Datenbanken.

Folgendes Select deckt deine Anforderung ab, solange es nur eine Funktion nur ein einziges mal je Haus gibt,
wenn es in Haus 2 die Funktion 2 mehrmals geben kann, gibt die Query einen Fehler zurück und das unsinnige Datenmodell wird noch unsinniger.

Select h.Nr,
h.Bezeichnung,
isnull((Select f1.Funktion from Tabelle2 f1 where f1.NR = h.NR and f1.Funktion = 1), 'Keine Funktion') as 'Funktion 1',
isnull((Select f2.Funktion from Tabelle2 f2 where f2.NR = h.NR and f2.Funktion = 2), 'Keine Funktion') as 'Funktion 2',
isnull((Select f3.Funktion from Tabelle2 f3 where f3.NR = h.NR and f3.Funktion = 3), 'Keine Funktion') as 'Funktion 3',
isnull((Select f4.Funktion from Tabelle2 f4 where f4.NR = h.NR and f4.Funktion = 4), 'Keine Funktion') as 'Funktion 4',
isnull((Select f5.Funktion from Tabelle2 f5 where f5.NR = h.NR and f5.Funktion = 5), 'Keine Funktion') as 'Funktion 5'
from Tabelle1 h

Gruß
Bitte warten ..
Mitglied: joni2000de
13.12.2011 um 13:52 Uhr
Hi,

danke für deine Hilfe! Sie hat den nötigen Anstoß gegeben. Ich habe das ganze über left join gelöst.

zu 1. Das Datenmodell kann ich nicht beinflussen.
zu 2. Das war nur die vereinfachte Darstellung die Namen sind schon schön

Gruß Joni
Bitte warten ..
Mitglied: Berrnd
13.12.2011 um 22:44 Uhr
Hi,

der Beitrag ist zwar schon als gelöst markiert, aber ich hatte grad Zeit und Lust damit zu "spielen": ;)
Ist ja fast ein schönes Beispiel, das mittels Pivotisierung gelöst werden kann, hier mal ein Code-Beispiel mit deinen Daten:
01.
select	nr as NR, 
02.
		bezeichnung as Bezeichnung, 
03.
		[1] as Funktion1, 
04.
		[2] as Funktion2, 
05.
		[3] as Funktion3, 
06.
		[4] as Funktion4, 
07.
		[5] as Funktion5, 
08.
		[6] as Funktion6, 
09.
		[7] as Funktion7, 
10.
		[8] as Funktion8, 
11.
		[9] as Funktion9, 
12.
		[10] as Funktion10, 
13.
		[11] as Funktion11, 
14.
		[12] as Funktion12 
15.
from ( 
16.
select tab1.nr, tab1.bezeichnung, tab2.funktion, tab2.name 
17.
from dbo.test2 tab1 
18.
left join dbo.test3 tab2 
19.
	on tab1.nr = tab2.nr) s1 
20.
pivot (max(name) for funktion 
21.
in (	[1], [2], [3], [4], 
22.
		[5], [6], [7], [8], 
23.
		[9], [10], [11], [12])) as pvt 
24.
order by nr
Viele Grüße - Bernd
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
Mehrere Spalten Durchsuchen und Ergebnisse in neuer Tabelle Ausgeben (3)

Frage von Mr.Green zum Thema VB for Applications ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Cloud-Dienste
Amazon: Dieser Lkw transportiert Daten in die Cloud (1)

Link von Kraemer zum Thema Cloud-Dienste ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...