View frage!

Hallo Leute!

Leider konnte mir keiner bei meinem anderen View Problem helfen, deswegen haben wir umstrukturiert.

Jetzt ergibt sich ein anderes Problem.
Ein View holt sich mit folgendem code Daten aus einer Tabelle (oder view):

SELECT vwA.created_uid AS uid, 
           count(vwA.wid) AS count
   FROM vwA
  WHERE to_date(vwA.year::text, 'YYYY'::text) < date_trunc('year'::text, now())
  GROUP BY vwA.created_uid;

Dieser View wird zusammen mit anderen views in einem view kombiniert.
Damit das funktioniert, braucht jeder View die gleiche anzahl an Zeilen und spalten (denke ich) ansonsten wird in dem view in dem alle anderen views zusammengefügt werden nichts angezeigt.
Wenn jetzt z.B. vwA keine Daten enthält die die oben angegebe WHERE bedingung erfüllt, dann wird nichts zurückgegeben. Dementsprechend fehlt dem View dann eine Zeile. Ich will, dass wenn nichts zurückgegeben wird eine “0” eingetragen wird (Zeile wird erstellt, Zelleninhalt ist “0”).

Funktioniert das irgendwie? Ich habs mit CASE THEN versucht, jedoch ohne Erfolg!
Wäre sehr dankbar für Hilfe!

MfG Emanuel

Ohne jetzt komplett zu verstehen, was Du da treibst: vermutlich suchst Du coalesce().

Andreas

Nein, ich werds nochmal besser erklären:

In einer TabelleA(tblA) gibts zwei Spalten: ‘uid’ und ‘from’.
In der Spalte ‘from’ stehen lauter Jahreszahlen (YYYY).
Angenommen es gibt 3 uids: 1, 2, 3
kann die TabelleA(tblA) z.b. so aussehen:
uid from
1 2005
1 2008
2 2006
2 2007
2 2009
3 2004

Weiters gibts einen ViewA der folgenden Code enthält:

SELECT tblA.uid AS uid, 
           count(tblA.uid) AS count
   FROM tblA
  WHERE to_date(tblA.from::text, 'YYYY'::text) > date_trunc('year'::text, now())
  GROUP BY tblA.uid;

Wird das ausgeführt bekomme ich folgendes Ergebnis:
uid count
1 1
2 1

Wie man sieht, sinds nur 2 Zeilen, ich will aber soviele Zeilen im View haben wie unterschiedliche uids in der tblA stehen.
In diesem Bsp. also 3.
Der View sollte eben so aussehen:
uid count
1 1
2 1
3 0

Ich hoffe jetzt ist die Sache verständlicher!

Vereinfacht:

select distinct uid, sum(case when from > 2007 then 1 else 0 end) from tbla1 group by 1 order by 1
(dürfte einen Syntaxfehler geben wegens dem from, das ist reserviert)

Prinzip klar?

test=*# select * from tbla ;
 uid | fro
-----+------
   1 | 2005
   1 | 2008
   2 | 2006
   2 | 2007
   2 | 2009
   3 | 2004
(6 rows)

test=*# select distinct uid,  sum(case when fro > 2007 then 1 else 0 end) from tbla group by 1 order by 1;
 uid | sum
-----+-----
   1 |   1
   2 |   1
   3 |   0
(3 rows)

Andreas

Das ist es danke!

Anmerkung: Das DISTINCT ist nicht notwendig, funktioniert auch ohne

Danke vielmals!

MfG Emanuel