Summe von Datumswerten

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Summe von Datumswerten

Re: Summe von Datumswerten

von wagnbeu0 » Sa, 29.05.2010 20:11

Okay, ich habe es nun geschafft:

Code: Alles auswählen

SELECT "E"."Nummer","F"."Thema","E"."2009","E"."2010","E"."2011","E"."2012"
from 
(SELECT "a"."Nummer",
SUM( ( SELECT COUNT( * ) FROM "Vortragsplan" WHERE "ID" = "a"."ID" AND YEAR( "Datum" ) = 2009 AND "Zielort" = 'Muenchen') ) AS "2009", 
SUM( ( SELECT COUNT( * ) FROM "Vortragsplan" WHERE "ID" = "a"."ID" AND YEAR( "Datum" ) = 2010 AND "Zielort" = 'Muenchen') ) AS "2010", 
SUM( ( SELECT COUNT( * ) FROM "Vortragsplan" WHERE "ID" = "a"."ID" AND YEAR( "Datum" ) = 2011 AND "Zielort" = 'Muenchen') ) AS "2011", 
SUM( ( SELECT COUNT( * ) FROM "Vortragsplan" WHERE "ID" = "a"."ID" AND YEAR( "Datum" ) = 2012 AND "Zielort" = 'Muenchen') ) AS "2012" 
FROM 
(select * from "Vortragsplan" RIGHT JOIN "Vortragsthemen" ON "Vortragsthemen"."Nummer" = "Vortragsplan"."Vortrag") AS "a"
group by "a"."Nummer"
) as "E", "Vortragsthemen" as "F"
where "E"."Nummer" = "F"."Nummer"
ORDER BY "E"."Nummer" ASC;
Ich konnte mich erinnern, dass ich in der Arbeit schon mehrmals Subabfragen machen musste, damit das sauber klappt. Jetzt bekomme ich genau den BEricht, denn ich wollte. Danke nochmals!!!

Re: Summe von Datumswerten

von wagnbeu0 » Sa, 29.05.2010 13:42

Nö, kriege ich nicht hin:
Ich bekomme zwar nun eine Summer aller Vorträge, auch wenn noch nie gehalten, aber die Auflistung, in welchem Jahr wie oft, daran scheitere ich schon wieder. Das mit den Joins bringt mich durcheinander:

Ich brauche zuerst eine Auflistung aller Vorträge, dann die Auswertung, wie oft in einem Jahr gehalten.

Diese Syntax bringt falsche Werte:

Code: Alles auswählen

SELECT "b"."Vortrag", "a"."Thema", 
SUM( ( SELECT COUNT( * ) FROM  "Vortragsthemen" as "a" LEFT JOIN "Vortragsplan" as "b" ON "a"."Nummer" = "b"."Vortrag" WHERE "ID" = "b"."ID" AND YEAR( "Datum" ) = 2009 ) ) AS "2009", 
SUM( ( SELECT COUNT( * ) FROM "Vortragsthemen" as "a" LEFT JOIN "Vortragsplan" as "b" ON "a"."Nummer" = "b"."Vortrag" WHERE "ID" = "b"."ID" AND YEAR( "Datum" ) = 2010 ) ) AS "2010", 
SUM( ( SELECT COUNT( * ) FROM  "Vortragsthemen" as "a" LEFT JOIN "Vortragsplan" as "b" ON "a"."Nummer" = "b"."Vortrag" WHERE "ID" = "b"."ID" AND YEAR( "Datum" ) = 2011 ) ) AS "2011",
SUM( ( SELECT COUNT( * ) FROM  "Vortragsthemen" as "a" LEFT JOIN "Vortragsplan" as "b" ON "a"."Nummer" = "b"."Vortrag" WHERE "ID" = "b"."ID" AND YEAR( "Datum" ) = 2012 ) ) AS "2012" 
FROM "Vortragsthemen" as "a" LEFT JOIN "Vortragsplan" as "b" ON "a"."Nummer" = "b"."Vortrag" 
GROUP BY "b"."Vortrag", "a"."Thema" 
ORDER BY "b"."Vortrag" ASC

Re: Summe von Datumswerten

von Barlee » Sa, 29.05.2010 10:52

Hallo wagnbeu0,

Code: Alles auswählen

SELECT * FROM "Themenliste" LEFT JOIN "Themenplan" ON "Themenliste"."Thema" = "Themenplan"."Thema"
Ggf. SQL direkt ausführen aktivieren!

Gruß Barlee

Re: Summe von Datumswerten

von wagnbeu0 » Sa, 29.05.2010 10:22

So, da bin ich nochmals: Ein Problem habe ich nun noch mit Joins:
Ich habe zwei Tabellen:

Themenliste
Nummer varchar
Thema varchar
Inhalt sind hier ca. 200 Themen.

Themenplan:
Thema varchar
datum date

Mittels des o.g. Befehls erhalte ich eine Liste, wie oft welcher Vortrag pro Jahr gehalten wurde. Leider zeigt er mir nun nur Vorträge an, die auch bereits gehalten wurden. Vorträge, die noch nicht gehalten wurden, zeigt er mir nicht an, die müssen aber in die Übersicht bzw. Abfrage noch rein.

Wie muss ich nun die abfrage durch Joins erweitern, damit er auch die Vorträge anzeigt, die in den ausgewählten Jahren NICHT gehalten wurde, also keinen Eintrag im Feld Datum haben? Ich komme hier mit der Syntax nicht mehr weiter...

Re: Summe von Datumswerten

von wagnbeu0 » Mi, 26.05.2010 12:45

Ja, genau diese Lösung brauche ich. So eine Holzhammer-Methode war mir auch eingefallen, aber ich habe gehofft, dass es dazu mittlerweile etwas eleganteres gibt.

Re: Summe von Datumswerten

von DPunch » Mi, 26.05.2010 11:09

Aloha

Mit der Holzhammer-Methode kann man das per SQL so

Code: Alles auswählen

SELECT
Thema,
SUM((SELECT COUNT(*) FROM meineTabelle WHERE ID = a.ID AND YEAR(Datum) = 2007 )) "2007",
SUM((SELECT COUNT(*) FROM meineTabelle WHERE ID = a.ID AND YEAR(Datum) = 2008 )) "2008",
SUM((SELECT COUNT(*) FROM meineTabelle WHERE ID = a.ID AND YEAR(Datum) = 2009 )) "2009",
SUM((SELECT COUNT(*) FROM meineTabelle WHERE ID = a.ID AND YEAR(Datum) = 2010 )) "2010",
SUM((SELECT COUNT(*) FROM meineTabelle WHERE ID = a.ID AND YEAR(Datum) = 2011 )) "2011"
FROM meineTabelle a
GROUP BY Thema
ORDER BY Thema
machen.
Eine elegantere Lösung fällt mir dazu im Moment nicht ein.

Re: Summe von Datumswerten

von AndreasJBittner » Mi, 26.05.2010 08:40

Hallo,

also brauchst Du die Zeilen- UND Spaltensummen?

Grüße
Andreas

Re: Summe von Datumswerten

von wagnbeu0 » Mi, 26.05.2010 07:05

Hallo,

danke für die Antworten, aber ein reines group-by bringt mich hier nicht weiter. Das Formular, dass ich nachbilden möchte/muss, bildet in der horizontalen die Jahre, in der vertikelen die Summe der Themen, also so wie im Beispiel.
Eine Möglichkeit wäre der EInsatz des Datenpiloten, wobei ich hier wieder ein extra Formular machen müsste, ich das ganze aber als Query zur Verfügung stellen muss.

Re: Summe von Datumswerten

von pmoegenb » Di, 25.05.2010 13:03

pmoegenb hat geschrieben:

Code: Alles auswählen

SELECT YEAR(Datum) AS Jahr, COUNT(Thema) AS Thema
GROUP BY YEAR(Datum), Thema
ORDER BY YEAR(Datum), Thema
Quatsch, siehe nachfolgend

Re: Summe von Datumswerten

von pmoegenb » Di, 25.05.2010 13:01

pmoegenb hat geschrieben:

Code: Alles auswählen

SELECT YEAR(Datum) AS Jahr, COUNT(Thema) AS Thema
FROM Tabelle
GROUP BY YEAR(Datum), Thema
ORDER BY YEAR(Datum), Thema

Re: Summe von Datumswerten

von pmoegenb » Di, 25.05.2010 13:00

Code: Alles auswählen

SELECT YEAR(Datum) AS Jahr, COUNT(Thema) AS Thema
GROUP BY YEAR(Datum), Thema
ORDER BY YEAR(Datum), Thema

Re: Summe von Datumswerten

von AndreasJBittner » Di, 25.05.2010 13:00

Hallo,

ja, kannst Du.

SELECT Count(Thema), <Datum> FROM <Tabelle> WHERE YEAR(<Datum>) BETWEEN 2008 AND 2011 GROUP BY YEAR(<Datum>)

könnte funktionieren, hab ich jetzt nicht ausprobiert.

Grüße
Andreas

Summe von Datumswerten

von wagnbeu0 » Di, 25.05.2010 12:45

Hallo, in meiner HSQL-DB gibt es ein Feld:
Datum = date
Thema = number

Ich will jetzt folgende Auswertung bekommen:

Code: Alles auswählen

Jahr      2008    2009  2010   2011
Thema
1           1         1       2        1 
2           3         4       2        1
3           1         2       3        1
Ich will also festellen, wie oft wurde welches Thema in welchem Jahr als gespeichert, und hier eine Summe erhalten. Die Datumsangaben liegen im Format DD.MM.YYYY vor, es müsste also auf YYYY zurückgestutzt werden.
Kann ich diese AUfgabe mit HSQLDB lösen?

Nach oben