collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 58
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13700
  • stats Beiträge insgesamt: 62191
  • stats Themen insgesamt: 8474
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden  (Gelesen 1442 mal)

Offline sashstyle

  • Newbie
  • Beiträge: 40
Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« am: April 12, 2017, 21:47:37 »
Hi Leute,

ich hab eine Kreuztabellenabfrage welche mir pro Frage die jeweilige Anzahl der gegebenen Antworten (vier stehen zur Auswahl) ausgeben soll --- liegt allerdings kein Datensatz vor der "gezählt" werden kann, dann kommt eine Fehlermeldung

Ideen?

Hier der Code:
TRANSFORM Val(Nz(Count([BanAntwortenID]),0)) AS Ausdr1
SELECT BanFragen.BanFrageText
FROM Berichtzeitraum, BanFragen INNER JOIN (BanBefragungen INNER JOIN (BanAntworten INNER JOIN BanGastantworten ON BanAntworten.BanAntwortenID = BanGastantworten.BanAntwortenID_F) ON BanBefragungen.BanBefragungID = BanGastantworten.BanBefragungID_F) ON BanFragen.BanFrageID = BanGastantworten.BanFrageID_F
WHERE (((BanBefragungen.BanBefragungDatum) Between [Berichtzeitraum].[Startdatum] And [Berichtzeitraum].[Enddatum]))
GROUP BY BanFragen.BanFrageID, BanFragen.BanFrageText
ORDER BY BanFragen.BanFrageID
PIVOT BanAntworten.BanAntwortenText;

DANKE!
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 770
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #1 am: April 13, 2017, 09:45:47 »
Val(Nz(Count([BanAntwortenID]),0))Ein Zählen einer leeren Datenmenge ergibt 0. Das dürfte man schon vom DCount kennen, wo man feststellt, ob es Datensätze gibt.
Nicht NULL, somit ist Nz umsonst und reine Selbstbeschäftigung.
Da 0 eine Zahl ist, muss man dann auch nicht den Zahlenwert per Val herausziehen.

Zitat
eine Fehlermeldung
Ideen?
Reichlich. Es gibt wohl ca. 65.000 Fehlernummern.

Vielleicht könnte man das am Thema einschränken?
Mit freundlichem Glück Auf!

Eberhard
 

Offline sashstyle

  • Newbie
  • Beiträge: 40
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #2 am: Mai 01, 2017, 14:12:42 »
Hi ebs17,

danke für deine Antwort - leider hab ich keine Benachrichtung erhalten und hatte auch erst jetzt wieder Zeit zum online gehen... daher sorry für die späte Rückmeldung!

Den Code habe ich damals von jemandem bekommen aus einem Forum und kann den auch nicht wirklich richtig lesen :-(

Kannst du mir sagen was ich ändern muss, damit bei der Kreuztabellen-Abfrage auch Werte angegeben werden, wenn das Ergebnis 0 ist?

Kurz zum Hintergrund:
Ich hab Fragen und dazu Antwortmöglichkeiten (1, 2, 3 oder eben keines davon), diese werden in einer Befragung zusammengeführt (pro Frage werden alle Antwortmöglichkeiten zur Auswahl gestellt). Wenn ich eine Abfrage ausführe erscheint für jede Frage die entsprechende Anzahl an abgegebenen Antworten (z.B. Frage 1 Antwort 1 = 3x; Antwort 2 = 7x; Antwort 3 = 2x; unbeantwortet = 8x) ... wenn es allerdings zu wenig bis gar keine beantworteten Fragen gibt, dann wird gar nichts angezeigt (nicht einmal 0).

Ich danke dir vielmals!
Sascha
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #3 am: Mai 01, 2017, 15:48:42 »
Bei Kreuztabellen muss man etwas tricksen, um an das gewüschte Resultat zu gelangen. Damit wir von einer gleichen Basis ausgehen, habe ich eine Tabelle Frage
 
Frage 
FrageIdFrageText
1F1
2F2
3F3

... und eine Tabelle Antwort angelegt.
Antwort 
AntwortIdFrageIdAntwort
113
213
313
412
531
632
732
832
931
1032


Eine einfache Kreuztabellenabfrage (wichtig ist der Left-Join)
RANSFORM Count(a.antwort) AS cnt
SELECT f.fragetext
FROM   FRAGE AS f
       LEFT JOIN ANTWORT AS a
              ON f.frageid = a.frageid
GROUP  BY f.fragetext
PIVOT a.antwort;
liefert dann dieses Ergebnis.
 
Query1 
FrageText<>123
F1
1
3
F2
0
F3
2
4


Die Spalte <> lässt sich durch das Festlegen fixierter Spaltenüberschriften eliminieren.

TRANSFORM Count(a.antwort) AS cnt
SELECT f.fragetext
FROM   FRAGE AS f
       LEFT JOIN ANTWORT AS a
              ON f.frageid = a.frageid
GROUP  BY f.fragetext
PIVOT a.antwort IN (1,2,3);

Die Sache schaut dann so aus:
 
Query1 
FrageText123
F1
1
3
F2
F3
2
4

Durch Einstellen der Format-Eigenschaften für die Spalte mit dem Alias-Namen c auf 0;0;0;0 sollte das Ergenis wunschgemäß erscheinen:
 
Query1 
FrageText123
F1
0
1
3
F2
0
0
0
F3
2
4
0
Grüße von der (⌒▽⌒)
 

Offline sashstyle

  • Newbie
  • Beiträge: 40
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #4 am: Mai 01, 2017, 16:33:02 »
hi lachtaube, besten dank für die super schnelle antwort.

beigefügt der screenshot von der bisherigen kreuztabellen-abfrage ... ich kann den code von dir nicht vollständig umschreiben weil ich denke, dass du es mit zwei tabellen gelöst hast und ich eben drei habe

HtlFrage
HtlAntworten
HtlBefragungen

...welche alle in dieser zusammen gefasst werden
HtlGastantworten

 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #5 am: Mai 02, 2017, 13:42:58 »
Sind das Multiple-Choice Fragen - oder wie muss man sich die Sachlage vorstellen?

PS: Im Prinzip musst Du nichts anderes machen, als zunächst die Antworten in einer Abfrage zusammenzufassen und diese Abfrage dann wie die Antwort-Tabelle im Beispiel zu behandeln.
Grüße von der (⌒▽⌒)
 

Offline sashstyle

  • Newbie
  • Beiträge: 40
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #6 am: Mai 02, 2017, 14:08:21 »
Zitat
Sind das Multiple-Choice Fragen - oder wie muss man sich die Sachlage vorstellen?

ja - zur auswahl stehen die antworten wie folgt:

tabelle: HtlAntworten
feld1: HtlAntwortenID (1,2,3) KEY
feld2: HtlAntwortenText (sehr zufrieden, zufrieden, unzufrieden UND unbeantwortet wenn nix selektiert ist)
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #7 am: Mai 02, 2017, 16:26:40 »
Wenn keine Mehrfachantworten je Frage möglich sind, ist das Modell suboptimal ausgefallen, denn Befragungen zu Gastantworten stellen dann immer eine (in dem Fall überflüssige) 1:1-Beziehung dar. Trotzdem sollte der beschriebene Weg noch zum Ziel führen.
Grüße von der (⌒▽⌒)
 

Offline sashstyle

  • Newbie
  • Beiträge: 40
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #8 am: Mai 03, 2017, 09:49:07 »
hi lachtaube, wie hättest du des denn dann gelöst? ich hab damals viel rumgefragt und die jetzt genutzte ist die einzige funktionierende lösung gewesen (daher hab ich die genutzt) ... naja funktionierend solang bis zu dem aktuellen fehler ;-)

kannst du mir deinen code nochmal kurz erklären was ich von meinen tabellen/feldnamen wo eintragen muss?

f = HtlFrage
a = HtlAntworten
...nehme ich an oder?
 

Offline sashstyle

  • Newbie
  • Beiträge: 40
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #9 am: Mai 25, 2017, 19:56:41 »
hi lachtaube,

ich hab nun hin und her gebastelt und es klappt einfach nicht :-( kannst du dir das bitte nochmal anschauen? *liebguck*

hier noch einmal die ausgangssituation ausführlich beschrieben (mag sein, dass es umständlich ist, doch darauf baut aktuell einfach alles auf was im hintergrund dazu gehört):

Tabelle 1 heißt "BanFragen" und beinhaltet vier Fragen:
Technik1
Technik2
Technik3
Technik4

Tabelle 2 heißt "BanAntworten" und beinhaltet vier Antwortmöglichkeiten:
Wert 0 = unbeantwortet
Wert 1 = sehr zufrieden
Wert 2 = weniger zufrieden
Wert 3 = unzufrieden

Tabelle 3 heißt "BanBefragungen" und hier werden Datum & Co. erfasst sowie mit Hilfe eines Buttons die Fragen aus Tabelle 1 eingefügt und pro Frage die Werte 1-3 zum anklicken aus Tabelle 2 (unbeantwortet ist es dann wenn nichts angeklickt wird), so dass darauf die Tabelle 4 entsteht:

Tabelle 4 heißt "BanGastantworten" und hier werden die drei bisherigen Tabellen zusammen gefasst in den Feldern
BanFrageID
BanBefragungID
BanAntwortID

...habe ich also in Tabelle 3 (BanBefragungen) eine Befragung vollständig ausgefüllt, so steht in Tabelle 4 folgendes:

BanFrageID 1
BanBefragungID xy (autowert)
BanAntwortID 3
BanFrageID 2
BanBefragungID xy (autowert)
BanAntwortID 3
BanFrageID 3
BanBefragungID xy (autowert)
BanAntwortID 3
BanFrageID 4
BanBefragungID xy (autowert)
BanAntwortID 0

= es gibt nun 3x die Antwort 3 (unzufrieden) und 1x die Antwort 0 (unbeantwortet)

In der abschließenden Kreuztabellenabfrage gibts folgendes Layout:

Zeilenüberschrift = BanFrageText
Spaltenüberschrift = BanAntwortenText
Wert = BanAntworten

Momentan ergibt diese Abfrage mit dem obigen Beispiel aber keine Kreuztabelle, weil nicht für jede Frage ein Wert vorliegt, sondern für Wert 3 = 3 und für Wert 0 = 1

...und genau das ist mein Problem

Ich habe inzwischen in der Kreuztabellenabfrage bei Wert das Feld wie folgt ausgefüllt:
Ausdr1: Wert(Nz(Anzahl([BanAntwortenID]);0))
...damit werden wenigstens wenn jede Antwort mindestens einen "Klick" aufweist auch mindestens die Zahl 0 angezeigt

...aber wie gesagt, wenn mal keine Befragung ausgefüllt wurde ODER eine Befragung nur eine Antwort aufweist (z.B. sehr zufrieden) und die anderen Antworten im Abfragezeitraum keinerlei "Klicks" haben, bekomme ich die Fehlermeldung:

"Das MS Access DB-Modul erkennt '[weniger zufrieden]' nicht als gültigen Feldnamen oder Ausdruck."

...kannst du die Sachlage des Problems verstehen und mir BITTE helfen?

VIELEN DANK!
Sascha
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 22990
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #10 am: Mai 26, 2017, 11:23:27 »
Hallo,

zeig doch besser den SQL-String der Abfrage, bei/mit dem der Fehler auftaucht...

Interpretativ  heißt das, dass "[weniger zufrieden]" als Feldname erkannt wird, den es natürlich nicht gibt.

Offline sashstyle

  • Newbie
  • Beiträge: 40
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #11 am: Mai 26, 2017, 13:00:11 »
Hi DF6GL, der Code ist im ersten Post von mir hinterlegt - an dem hat sich bislang (meins Wissens) nichts geändert... Danke!
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 22990
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #12 am: Mai 26, 2017, 15:17:46 »
Hallo,

steht dann das:

Zitat
Ich habe inzwischen in der Kreuztabellenabfrage bei Wert das Feld wie folgt ausgefüllt:
Ausdr1: Wert(Nz(Anzahl([BanAntwortenID]);0))
...damit werden wenigstens wenn jede Antwort mindestens einen "Klick" aufweist auch mindestens die Zahl 0 angezeigt


nicht im Widerspruch dazu?

Offline sashstyle

  • Newbie
  • Beiträge: 40
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #13 am: Mai 26, 2017, 22:09:34 »
Hallo,

steht dann das:

Zitat
Ich habe inzwischen in der Kreuztabellenabfrage bei Wert das Feld wie folgt ausgefüllt:
Ausdr1: Wert(Nz(Anzahl([BanAntwortenID]);0))
...damit werden wenigstens wenn jede Antwort mindestens einen "Klick" aufweist auch mindestens die Zahl 0 angezeigt


nicht im Widerspruch dazu?


...ich glaub das hab ich falsch formuliert - mir hat man gesagt, dass diese eingabe dafür sorgt, dass ich die zahl "0" angezeigt bekomme, wenn innerhalb einer befragung bei einer frage eine antwort nie angeklickt wurde - z.b. so:

befragung 1
frage 1
gegebene antwort 3

somit hab ich das abfrage ergebnis
frage 1 - antwort 3 - 1x
frage 1 - antwort 1 - 0x
frage 1 - antwort 2 - 0x
frage 1 - antwort 0 - 0x

...oder hab ich diese funktion falsch verstanden?
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 22990
Re: Abfrage soll 0 ausgeben wenn kein Datensatz vorhanden
« Antwort #14 am: Mai 27, 2017, 08:31:22 »
Hallo,


wenn Du Inner Join Verknüpfung verwendest, werden "leere" Ds nicht mit angezeigt.

Versuch mal left, bzw. right join einzusetzen.