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

Spezielle Sortierung mit Summierung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von tabstop, 23 August 2012.

  1. tabstop

    tabstop Neuer Benutzer

    Hallo,

    ich stehe momentan auf dem Schlauch und es wäre schön, wenn mir jemand helfen könnte . Bin mir eigentlich sicher, dass die eine Lösung machbar ist.
    Code:
    CREATE TABLE #Gewichte
    (
        [ID] [int] NOT NULL,
        [Nr] [nchar](10) NOT NULL,
        [Gewicht] [int] NOT NULL,
        [ErstellDat] [datetime] NOT NULL,
    );
     
    INSERT INTO #Gewichte([ID], [Nr], [Gewicht], [ErstellDat])
    SELECT 1, N'10        ', 20, '20120823 11:20:00' UNION ALL
    SELECT 2, N'10        ', 30, '20120823 11:25:00' UNION ALL
    SELECT 3, N'10        ', 50, '20120823 11:30:00' UNION ALL
    SELECT 4, N'20        ', 10, '20120823 11:40:00' UNION ALL
    SELECT 5, N'20        ', 20, '20120823 11:50:00' UNION ALL
    SELECT 6, N'10        ', 15, '20120823 12:00:00' UNION ALL
    SELECT 7, N'10        ', 25, '20120823 12:10:00';
     
    select *
    from #Gewichte;
     
    drop table #Gewichte;
    
    Es soll jetzt so sein, dass die Daten sortiert sein müssen nach dem ErstellDat und die Gewichte je Nr summiert werden sollen. Am Ende sollte folgendes herauskommen.

    Nr;Gewicht;Start;Ende
    10;100;23.08.2012 11:20;23.08.2012 11:30
    20;30;23.08.2012 11:40;23.08.2012 11:50
    10;40;23.08.2012 12:00;23.08.2012 12:10

    Mit Hilfe eines Cursors kommt man sicherlich ans Ziel, dass ganze sollte jedoch mit Hilfe eines Statements funktionieren.
     
  2. Tommi

    Tommi Datenbank-Guru

    Hallo tabstop,

    meine Lösung würde so aussehen:


    SELECTID1,Nr,
    SUM(Gewicht)asGewicht,
    MIN(ErstellDat)asStart,
    MAX(ErstellDat)asEnde
    FROM (
    select*,
    ISNULL((SELECTTOP 1 G1.ID
    FROM#GewichteG1
    WHEREG1.ID<G.IDANDG1.Nr<>G.Nr
    ORDERBYG1.IDDESC),1)asID1
    from#GewichteG)X
    GROUPBYID1,Nr
    ORDERBYStart


    Viele Grüße
     
    ukulele und PLSQL_SQL gefällt das.
  3. tabstop

    tabstop Neuer Benutzer

    Hallo Tommi,

    super Arbeit, mein Tag ist gerettet. Anbei nochmal das Statement mit Formatierung:
    Code:
    SELECT
        ID1,
        Nr,
        SUM(Gewicht)AS Gewicht,
        MIN(ErstellDat)AS START,
        MAX(ErstellDat)AS Ende
    FROM (
        SELECT *,
            ISNULL((SELECT TOP 1 G1.ID
            FROM #Gewichte G1
            WHERE G1.ID < G.ID AND G1.Nr <> G.Nr
            ORDER BY G1.ID DESC),1)AS ID1
        FROM #Gewichte G)X
    GROUP BY ID1, Nr
    ORDER BY START
    
     
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