Fragensteller
SQL Statement Problem (Pivot)

Allgemeine Diskussion
-
Hallo Forum,
ich habe eigentlich gleich mehrere Probleme und bin leider recht unerfahren was T-SQL angeht, deswegen vorsotglich SORRY für die "dummen" Fragen.
Zunächst: Ich soll diverse Views erstellen die schlußendlich über Sharepoint verteilt werden. Einer davon ist die Darstellung von Monteursressourcen aus unserem ERP System. Dort werden die Informationen die ich anzeigen soll weitgehend in zwei Tabellen abgelegt. Ich erkenne in Tabelle 1 um was für Aufträge es geht (Montage, Zeichnen, Werkstatt) und in Tabelle zwei werden die inhaltlichen Dinge wie Wunsch-Beginn, Wunsch-Ende, und vermutliche Dauer gespeichert.
Legt also jemand einen Montageauftrag an, werden in Tabelle zwei mindestens drei Einträge, als je einzelner Datensatz, angelegt: In etwa so:
TBL1:
ProjektID; Name; bla bla...
4711, Dr. Oetker, ...
TBL2:
ProjektID; Merkmal, Wert
4711; Beginn; 01.10.2013
4711;Ende; 24.12.2013
4711; Auwand; 567
Ich möchte nun ein Ergebnis bekommen das wie folgt aussieht:
ProjektID, name, Beginn, Ende, Aufwand
4711; Dr. oetker; 01.10.2013; 24.12.2013; 567
trotz diverser Hinweise im Netz habe ich es nicht hinbekommen.
Hinzu kommt, dass es in TBL2 für jede Auftragsart einen unterschiedlichen Eintrag für die oben Beschriebenen Werte gibt, als WBeginn (für Werkstattaufträge), WEnde, MBeginn (Montageaufträge), MEnde, ZBeginn (Zeichnungsaufträge) ...
Wenn ich nun aus TBL1 erkenne um was für eine Auftragsart es sich handelt, wie erkenne ich dann, was für Datensätze ich aus TBL2 heranzihen muss?
Ein Drama... ich verzweifele..
Danke für jeden Hinweis
Gruß
Heiko
- Typ geändert Raul TalmaciuMicrosoft contingent staff Mittwoch, 19. Juni 2013 08:39 Warten auf Feedback
Alle Antworten
-
Hallo Heiko,
ich gehe mal davon aus, dass Du das Datenbankdesign nicht ändern kannst. Dadurch hast Du jetzt mit einigen Schwierigkeiten zu kämpfen, die eine elegante Lösung unmöglich machen. Hier ein Beispiel, was ich basierend auf Deinen Angaben erstellt habe. Schrecklich ist der Join mit dem CASE und den fest definierten Werten. Weiterhin können in Tabelle2 ja nur Strings als Wert abgelegt werden, da Du hier verschiedenste Informationen ablegen willst. Eine Plausi-Prüfung durch die Datenbank ist damit nicht mehr so einfach möglich.Declare @Tbl1 as Table(Produkt int, Name varchar(20), Art varchar(10)); Declare @Tbl2 as Table(Produkt int, Merkmal varchar(20), Wert varchar(20)); Insert into @Tbl1(Produkt, Name, Art) values(1, 'Projekt1', 'Montage'); Insert into @Tbl1(Produkt, Name, Art) values(2, 'Projekt2', 'Zeichnen'); Insert into @Tbl1(Produkt, Name, Art) values(3, 'Projekt3', 'Werkstatt'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(1, 'MBeginn', 'Datum MBeginn'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(1, 'MEnde', 'Datum MEnde'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(1, 'MAufwand', 'Wert MAufwand'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(2, 'ZBeginn', 'Datum ZBeginn'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(2, 'ZEnde', 'Datum ZEnde'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(2, 'ZAufwand', 'Wert ZAufwand'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(3, 'WBeginn', 'Datum WBeginn'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(3, 'WEnde', 'Datum WEnde'); Insert into @Tbl2(Produkt, Merkmal, Wert) values(3, 'WAufwand', 'Wert WAufwand'); Select t.*, a.Wert, b.Wert, c.Wert from @Tbl1 t left join @Tbl2 a on t.Produkt = a.Produkt and case when t.Art = 'Montage' then 'MBeginn' when t.Art = 'Zeichnen' then 'ZBeginn' when t.Art = 'Werkstatt' then 'WBeginn' end = a.Merkmal left join @Tbl2 b on t.Produkt = b.Produkt and case when t.Art = 'Montage' then 'MEnde' when t.Art = 'Zeichnen' then 'ZEnde' when t.Art = 'Werkstatt' then 'WEnde' end = b.Merkmal left join @Tbl2 c on t.Produkt = c.Produkt and case when t.Art = 'Montage' then 'MAufwand' when t.Art = 'Zeichnen' then 'ZAufwand' when t.Art = 'Werkstatt' then 'WAufwand' end = c.Merkmal ;
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu/ -
Hallo,
bist Du hier weitergekommen?
Gruss,
RaulRaul Talmaciu, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.