Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Dynamisches Pivot von Zeilen in Spalten

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von ny_unity, 10 Dezember 2020.

  1. ny_unity

    ny_unity Datenbank-Guru

    Guten Morgen,

    ich stehe vor einem neuen Problem, weiß nicht so recht wie es lösen soll.

    Gegeben ist eine Tabelle mit ID`s (Bewerber) mit Anlagedatum und Herkunft (also Kanal über den sich der Bewerber beworben hat). Ich möchte nun zählen, wie viele Bewerber sich über welchen Kanal in welchem Zeitraum sich beworben haben.

    Mit einem einfachen Pivot wäre das sicher kein Problem, aber ich habe mehr als 100 Herkünfte, die stetig wachsen, daher wollte ich es gern dynamisch haben, aber genau dort hört mein Wissen auf.

    Also im Moment sieht es so aus:

    ID Zeitraum Herkunft
    1 01.01.2020 Facebook
    2 01.01.2020 Twitter
    3 01.01.2020 Arbeitsamt
    4 01.02.2020 Facebook

    Wie ich es gerne hätte:

    Zeitraum Facebook Twitter Arbeitsamt
    01.01.2020 1 1 1
    01.02.2020 1 0 0

    Habt ihr eine Idee?

    Danke,

    Erik
     
  2. dabadepdu

    dabadepdu Datenbank-Guru

    Es gibt das Pivot Kommando auch in MS SQL. Aber es ist soweit ich weiß in keinem RBMS dynamisch. Du musst immer die Ergebnisspalten angeben, es nimmt Dir nur etwas von der Transformationsarbeit ab.
    Es gibt da ca 2 Ansätze:
    - Pivot entsprechend dem Bedarf erst in einem Report Generator zu machen, der das dann vielleicht etwas besser und dynamischer kann, hier habe ich aber keine praktischen Tipps / Tools für MS SQL
    - Das SQL Statement für die Pivotisierung dynamisch zusammen bauen mit der jeweils gewünschten Spaltenauswahl
    - den vorigen Vorschlag, SQL zu generieren , über dafür vorhandene Server Funktionen zu erledingen (weiß auch nicht, ob es die in MS SQL gibt)
    - Nicht dynamisch zu sein, zumindest nicht in den Spaltennamen. Das bietet sich ganz gut an, wenn man z.B. für 12 (feste) Monate, Jan- Dez oder so Daten pivotiersiert. Das passt offensichtlich nicht so gut zu Deinem Anwendungsfall.
     
  3. ny_unity

    ny_unity Datenbank-Guru

    Grüße,

    ich konnte mein Ziel erreichen, muss das ganze jetzt nur noch irgendwie als VIEW hinbekommen...

    Code:
    declare @col varchar(1000)
    declare @sql varchar(2000)
    select @col = COALESCE(@col + ', ','') + QUOTENAME(herkunft)
    from beweber_log Group by herkunft
    Set @sql='select * from (select CONVERT(varchar,DATEPART(YEAR,Anlagedatum)) + ''/'' + CASE WHEN DATEPART(MONTH,Anlagedatum) < 10 THEN ''0'' ELSE '''' END + CONVERT(varchar, DATEPART(MONTH,Anlagedatum)) AS zeitraum, herkunft, bewerber_id from beweber_log) src 
    PIVOT (COUNT(bewerber_id) FOR herkunft
    IN ('+@col+')) pvt'
    EXEC(@sql)
    
     
  4. ny_unity

    ny_unity Datenbank-Guru

    Hat jemand eine Idee, wie ich meine stored prozedure als view oder temp tabelle ausgeben kann, ohne beim insert alle spalten angeben zu müssen?

    also analog zu select * into #temp FROM stored_prozedure

    ?
     
  5. ny_unity

    ny_unity Datenbank-Guru

    ich habe es so gelöscht, das jede Stunde ein job läuft, der eine Tabelle erstellt und die vorhandene droppt, das reicht mir... die Werte werden eh nur stündlich aktualisiert.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden