Announcement

Collapse
No announcement yet.

Denormalisierung einer MSSQL DB

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Denormalisierung einer MSSQL DB

    Hallo Forum,

    ich (MSSQL Noob) bin auf der Suche nach einer Möglichkeit mehrere Tabellen um eine Normalisierungsstufe zu reduzieren.
    Code:
    
    tbKunde
    ID_Kunde   Kunde
    1          Britta
    2          Georg
    3          Claudia
    4          Hans
    5          Beate
    6          Kurt
    
    tbTel
    ID_Tel     ID_Kunde   TelNr         Nr
    1          1          0000          1
    2          1          1111          2
    3          1          2222          3
    4          1          3333          4
    5          2          7777          1
    6          2          1112          2
    7          3          4545          1
    8          5          9898          1
    9          5          5656          2
    10         5          4878          3
    Ich suche nun ein Abfragekonstrukt um dies in eine Tabelle dieser Form zu überführen:
    Code:
    tbAlle
    ID_Kunde   Kunde     Tel1    Tel2    Tel3    Tel4
    1          Britta    0000    1111    2222    3333
    2          Georg     7777    1112
    3          Claudia   4545     
    4          Hans
    5          Beate     9898    5656    4878
    Ein Ansatz unter Access wäre folgender:

    Code:
    TRANSFORM First(T.TelNr) AS Dummy
    SELECT   K.ID_Kunde, K.Kunde
    FROM     tbKunde AS K
             LEFT JOIN tbTelefon AS T
             ON K.ID_Kunde = T.ID_Kunde
    GROUP BY K.ID_Kunde, K.Kunde
    PIVOT "Tel" & T.Nr In ("Tel1","Tel2","Tel3","Tel4")
    Die MSSQL DB die ich bearbeite ist MSSQL8 via MSDE zum Leben erweckt, da habe ich bislang noch keinen Erfolg gehabt das zu replizieren.
    Geht das überhaupt so? Oder gibt´s Gegenvorschläge?
    :-)

    Danke schonmal!

  • #2
    Hi,
    in TSQL gibt es prinzipiell die Möglichkeit einer Pivotisierung. Nur weiß ich grad nicht welche Version MSSQL8 ist und ob das da schon funktioniert

    Prinzipiell kann so etwas aber immer mit Case-Statements gelöst werden.

    Mein Ansatz wäre da in etwa:
    Code:
    SELECT ID_KUNDE,
    MAX(CASE WHEN Nr = 1 THEN TelNr ELSE NULL END) AS Tel1
    MAX(CASE WHEN nr = 2 THEN TelNr ELSE NULL END) As Tel2
    .....
    FROM     tbKunde AS K
             LEFT JOIN tbTelefon AS T
             ON K.ID_Kunde = T.ID_Kunde
    GROUP BY K.ID_Kunde
    Ist vieleicht etwas holprig, aber bei einer überschaubaren Anzahl an Pivot-Spalten möglich.

    Grüße,
    Stefan

    Comment


    • #3
      Stefan - danke!

      Die Abfrage erzeugte nur ein "Syntaxfehler in der Nähe von 'PIVOT' ".
      Ohne Hinweis darauf dass das verwendete DB System die Anweisung einfach noch nicht unterstützt.

      Mit Deiner Kreuztabellenabfrage klappt´s es hingegen wunderbar, danke!

      Comment


      • #4
        MSQL8 = SQL Server 2000
        Die PIVOT Funktion gibt es erst ab Version 2005.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Freut mich geholfen zu haben

          Comment

          Working...
          X