Announcement

Collapse
No announcement yet.

Pivottabelle

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

  • Pivottabelle

    Hi ,
    habe ein Problem welches mangelndem wissen entspringt

    Beschäftige mich gerade mit einer Pivot- Tabelle um ein Darstellungsproblem zu lösen.

    Bin auch für andere Vorschläge offen.

    Habe die beiden Tabellen:


    Tabelle : SpaltenTagZ

    In der Tabelle SpaltenTagZ werden einer Spalte einer oder mehrere Tags zugeordnet.

    HTML Code:
    SpaltenId  TagId	SpaltenId 
    ------------------------------------	
    1	100	10017
    2	100	10018
    3	100	10019
    4	101	10039
    n	10n	100n
    


    Tabelle : Tag

    In der Tabelle Tag habe ich die Werte der Tags zu einer bestimmten Uhrzeit.
    HTML Code:
    		
    TagId 	Datum	              Wert
    ------------------------------------------
    10017	01.09.2008 20:00	23
    10018	01.09.2008 20:00	345
    10019	01.09.2008 20:00	22
    10039	01.09.2008 20:00	223
    100n	01.09.2008 20:00	234
    Nun würde ich gerne diese Darstellungsform in einem View erreichen:

    HTML Code:
    Datum	                100		101		10n
    --------------------------------------------------------------------------------------	
    01.09.2008 20:00	     23	          223	           234
    01.09.2008 20:00	     345				
    01.09.2008 20:00        22				



    Habe dies mittels 2 Views und Code in .Net geschafft.
    Wird aber sehr langsam.

    Wie gesagt würde diese gerne mit einer View realisieren.

    Wurde mich über Hilfe freuen.

    Danke
    Zuletzt editiert von dommeh; 18.05.2009, 08:05.

  • #2
    Hallo, Dommeh,

    wenn du weißt, wie deine Spalten-IDs heißen, dann hilft dir vielleicht so etwas weiter
    Code:
    > select * from stz;
    
            ID  SPALTENID      TAGID
             1        100     10017
             2        100      10018
             3        100      10019
             4        101      10039
             5        102      10044
             6        100      10055
    
    6 Zeilen ausgewählt.
    
    > select * from tag;
    
         TAGID DATUM          WERT
         10017 18.05.09         23
         10018 18.05.09        345
         10019 18.05.09         22
         10039 18.05.09        223
         10044 18.05.09        234
         10055 19.05.09         77
    
    6 Zeilen ausgewählt.
    
    WITH ausgangsdaten AS (
    SELECT t.datum
          ,row_number() OVER (PARTITION BY t.datum,s.spaltenid ORDER BY t.tagid) rn
           ,s.spaltenid
          ,t.tagid
          ,t.wert
    FROM butral.tag t,butral.stz s
    WHERE t.tagid=s.tagid
    )
    SELECT a.datum
          ,MAX(CASE WHEN a.spaltenid=100  THEN a.wert ELSE NULL END) a100
          ,MAX(CASE WHEN a.spaltenid=101  THEN a.wert ELSE NULL END) a101
          ,MAX(CASE WHEN a.spaltenid=102  THEN a.wert ELSE NULL END) a102
    FROM ausgangsdaten a
    GROUP BY a.datum,a.rn
    ORDER BY a.datum,a.rn
    ;
    
    DATUM          A100       A101       A102
    18.05.09         23        223        234
    18.05.09        345            
    18.05.09         22            
    19.05.09         77
    Falls du die Spalten-Ids nicht kennst, sieht es schlecht aus mit reinem SQL. Da geht's dann nur mit dynamischen Dingen.

    Gruß

    Ralf
    Zuletzt editiert von ralfb; 19.05.2009, 07:38.

    Comment


    • #3
      Danke für deine Hilfestellung.

      Kenne leider die SpaltenIds nicht.

      Optimiere dann wohl doch meinen .NET Code

      THX

      Comment

      Working...
      X