Spezielle Sortierung mit Summierung

tabstop

Neuer Benutzer
Beiträge
2
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.
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
289
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
 
Werbung:

tabstop

Neuer Benutzer
Beiträge
2
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
 
Oben