Matze: SQL-Abfrage - Ausgabe einer Summe zu verschiedenen Zeiträumen

Beitrag lesen

Hallo!
Vom PostgreSQL habe ich zwar keine Ahnung, aber ich habe dir mal  exemplarisch was für den MSSQL-Server geschrieben. (TABELLE ist der Name der Eingangstabelle!)

Ich habe 2 Lösungen. Die erste geht direkt über 2 SELECT´s und ist evtl. sogar übernehmbar (sollte dann aber in eine Sicht etc. rein...):
---------ANFANG
select 'Name / Datum' as 'Name',
 CONVERT(char(10), DATEADD(dd, - 2, GETDATE()), 104) as Vorgestern,
 CONVERT(char(10), DATEADD(dd, - 1, GETDATE()), 104) as Gestern,
 CONVERT(char(10), DATEADD(dd, - 0, GETDATE()), 104) as Heute
union all
Select distinct [Name],
 (Select case when sum(Wert) is null then '0' else convert(varchar(20),sum(Wert)) end as Wert from  TABELLE  where [Name]=[DatenbasisNamen].[Name] and CONVERT(char(10), Datum, 104)=CONVERT(char(10), DATEADD(dd, - 2, GETDATE()), 104)),
 (Select case when sum(Wert) is null then '0' else convert(varchar(20),sum(Wert)) end as Wert from  TABELLE  where [Name]=[DatenbasisNamen].[Name] and CONVERT(char(10), Datum, 104)=CONVERT(char(10), DATEADD(dd, - 1, GETDATE()), 104)),
 (Select case when sum(Wert) is null then '0' else convert(varchar(20),sum(Wert)) end as Wert from  TABELLE  where [Name]=[DatenbasisNamen].[Name] and CONVERT(char(10), Datum, 104)=CONVERT(char(10), DATEADD(dd, - 0, GETDATE()), 104))
from TABELLE as [DatenbasisNamen]
---------ENDE
Die 2. geht über eine Funktion, ist also sehr wahrscheinlich nicht so übertragbar, gibt aber vielleicht einen Ansatz.
---------ANFANG
CREATE FUNCTION Auswertung()
RETURNS @retContactInformation TABLE([Name] varchar(255) not null,[Vorgestern] varchar(255) not null, [Gestern] varchar(255) not null,[Heute] varchar(255) not null)
AS
BEGIN

Insert into @retContactInformation
select 'Name / Datum',
  CONVERT(char(10), DATEADD(dd, - 2, GETDATE()), 104),
  CONVERT(char(10), DATEADD(dd, - 1, GETDATE()), 104),
  CONVERT(char(10), DATEADD(dd, - 0, GETDATE()), 104)
Insert into @retContactInformation  Select distinct [Name],
 (Select case when sum(Wert) is null then 0 else sum(Wert) end as Wert from  TABELLE  where [Name]=[DatenbasisNamen].[Name] and CONVERT(char(10), Datum, 104)=CONVERT(char(10), DATEADD(dd, - 2, GETDATE()), 104)),
 (Select case when sum(Wert) is null then 0 else sum(Wert) end as Wert from  TABELLE  where [Name]=[DatenbasisNamen].[Name] and CONVERT(char(10), Datum, 104)=CONVERT(char(10), DATEADD(dd, - 1, GETDATE()), 104)),
 (Select case when sum(Wert) is null then 0 else sum(Wert) end as Wert from  TABELLE  where [Name]=[DatenbasisNamen].[Name] and CONVERT(char(10), Datum, 104)=CONVERT(char(10), DATEADD(dd, - 0, GETDATE()), 104))
from TABELLE as [DatenbasisNamen]
RETURN
END

die dan per

SELECT     Name, Vorgestern, Gestern, Heute
FROM         dbo.Auswertung()

abgefragt werden kann.
---------ANFANG

Das Resultat ist in beiden Fällen folgendes:

Name            Vorgestern      Gestern         Heute
----------------------------------------------------------
Name / Datum    03.07.2008      04.07.2008      05.07.2008
Heike           0.00            0.00            0.00
Igor            10.00           1.00            0.00
Tom             7.00            0.00            0.00

Vielleicht hilft dir das ja weiter.
Eine kompaktere Lösung fällt mir nicht ein, aber funktionieren tut sie ;-)

Gruß
Matze