PDA

Vollständige Version anzeigen : Werte in Abfrage ersetzen


frigg
14.06.2012, 21:25
Hallo zusammen.

Habe eine kleine Frage. Ich habe folgende Kreuzabfrage:
TRANSFORM Sum(K33.Zellzahl) AS SommeDeZehlzahl
SELECT K33.Tier, K33.Nummer
FROM K33
GROUP BY K33.Tier, K33.Nummer
ORDER BY K33.Tier, K33.Nummer, K33.Wägedatum DESC
PIVOT K33.Wägedatum;


Nun möchte ich die Werte Zellzahl erstezen je nach grösse, d.h. wenn
Zellzahl < 150 mit a
Zellzahl zw 150 und 300 mit b
Zellzahl > 300 mit c

um danach Protzente zu berechnen.

ISt dies möglich und wie stelle ich das an ?

Vielen Dank und freundliche Grüsse

maikek
14.06.2012, 22:55
Hallo,
wann und wie möchtest du die Werte von Zellzahl ersetzen? Und warum? Um etwas zu berechnen, ist "a" "b" "c" nicht wirklich geeignet ... und Sum("a") ist auch eher sinnfrei.
Wenn du die Zellzahl in deiner gezeigten Abfrage prozentual je nach Wert verändern willst, versuche mal die Switch-Funktion:
TRANSFORM Sum(Switch(K33.Zellzahl < 150, 20*(Zellzahl/100), Zellzahl between 150 and 300, 30*(Zellzahl/100), Zellzahl > 300, 40*(Zellzahl/100))) AS SommeDeZehlzahl
Bin mir nicht sicher, ob das so direkt in einer Kreuztabellenabfrage funktioniert, im Zweifelsfall musst du die Berechnung/Umwandlung vorher machen und danach auf die berechneten Werte die Kreuztabellenabfrage loslassen.
maike

frigg
17.06.2012, 16:16
Danke für die Hilfe, aber leider krieg ich es nicht wie gewünscht hin.

Lassen wir mal die Protzenrechnung. Wie kann ich Werte ersetzen ?

Nehmen wir mal an, ich habe eine Liste mit verschiedenen "Anzahl Tagen"
nun möchte ich soritieren wieviele Werte zw. 0 und 60d sind, wieviel zw. 61 und 120 etc. etc.
Wie kann ich die Tage also in eine "Klasse" umwandeln ?

Bsp:

Anz TagecKlasse
34 --> 60
53 --> 60
64 --> 120
34 --> 60
92 --> 120
123 --> 180
86 --> 120
34 --> 60
179 --> 180

Ich hoffe es ist verständlich ?! Kanns Du (oder sonstwer) mir da weiterhelfen ? Lieber als SQL wäre mir was ich bei der Abfrage reinschreiben sollte.

Vielen Dank und Gruss

maikek
18.06.2012, 10:03
Moin,
nimm eine zweite Tabelle tblKlasse dazu, in der du die Klassen vorrätig hältst:
KlasseID (Autowert), TVon (Zahl), TBis (Zahl).
Die Abfrage sieht dann so aus:
SELECT tblTKlasse.TKlasseID, Count(tblTage.Tage) AS TageKlasse
FROM tblTage, tblTKlasse
WHERE (((tblTage.Tage) Between [TVon] And [Tbis]))
GROUP BY tblTKlasse.TKlasseID;
Abfrageentwurfsfenster öffnen, Menü Ansicht -> SQL Ansicht wählen, dort die SQL-Syntax oben hineinkopieren. Jede Abfrage hat solch ein SQL-Statement zur Grundlage, wenn du wieder in die Entwurfsansicht zurückschaltest, siehst du quasi die "Übersetzung".
maike

frigg
18.06.2012, 19:38
Danke vielmal für die Erleuterungen. Die Grundsätze des SQL sind mir schon klar. Meine Abfrage ist allerdings schon relativ kompliziert.
Habe es versucht anzupassen doch es klappt nicht.
tblKlasse habe ich erstellt.

Der SQL meiner Abfrage sieht so aus:

SELECT qry_Waegedaten.Tier, qry_Waegedaten.Nummer, K33.Kalbedatum, qry_Waegedaten.Datum_1, K33.Zellzahl, qry_Waegedaten.Datum_2, K33_1.Zellzahl, DateSerial(Left([Datum_1],4),Mid([datum_1],5,2),Right([datum_1],2)) AS DatWiegung, DateSerial(Left([K33.Kalbedatum],4),Mid([K33.Kalbedatum],5,2),Right([K33.Kalbedatum],2)) AS DatKalb, DateDiff("d",DateSerial(Left([K33.Kalbedatum],4),Mid([K33.Kalbedatum],5,2),Right([K33.Kalbedatum],2)),DateSerial(Left([Datum_1],4),Mid([datum_1],5,2),Right([datum_1],2)),2,2) AS AnzTage
FROM K33 AS K33_1 INNER JOIN (K33 INNER JOIN qry_Waegedaten ON (K33.Nummer = qry_Waegedaten.Nummer) AND (K33.Wägedatum = qry_Waegedaten.Datum_1)) ON (K33_1.Nummer = qry_Waegedaten.Nummer) AND (K33_1.Wägedatum = qry_Waegedaten.Datum_2)
WHERE (((K33.Zellzahl)>150) AND ((K33_1.Zellzahl)<=150));



Die AnzTage möchte ich nun in meine in tblKlasse erstellten Klassen einteilen.

Könntest Du mir noch einmal versuchen zu helfen ? Wäre spitze ..
Gruss

maikek
18.06.2012, 22:10
Hmm, durch diesen Wust an Wägedaten, Datums, die irgendwie doch keine sind und gejointen Alias-Tabellen blick ich nicht durch.
Und willst du nun eigentlich die Anzahl der "AnzTage" wissen, die in die jeweilige Klasse fällt
nun möchte ich soritieren wieviele Werte zw. 0 und 60d sind, wieviel zw. 61 und 120 etc. etc.
oder doch
Die AnzTage möchte ich nun in meine in tblKlasse erstellten Klassen einteilen.
:confused:
Diese Frage bitte beantworten, dann guck ich mir das morgen bei Gelegenheit mal in Ruhe an.

Kannst du vielleicht deine Datenbank mit ein paar Dummydaten im Format Access 2003 hier hochladen?

maike

zra8886
19.06.2012, 06:27
Moin,

...Nehmen wir mal an, ich habe eine Liste mit verschiedenen "Anzahl Tagen"
nun möchte ich soritieren wieviele Werte zw. 0 und 60d sind, wieviel zw. 61 und 120 etc. etc.
Wie kann ich die Tage also in eine "Klasse" umwandeln ?
...

Nehmen wir auch mal an, dass die Basis diese Tabelle ist:
<b><em>TblTageKlasse</em></b><table border="1" cellspacing="0" cellpadding="0" style="border-color:#000000; border-width: 1px; font-size:11pt; background-color:#ffffff; padding-left:2pt; padding-right:2pt; "><colgroup><col style="font-weight:bold; width:40px;" /><col style="width:117px;" /><col style="width:117px;" /><col style="width:117px;" /></colgroup><tr style="background-color:#99CCFF; text-align:center; font-weight:bold; "><td>&nbsp;</td><td>A</td><td>B</td><td>C</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">1</td><td style="color:#000000; background-color:#C0C0C0; text-align:center; " >ID</td><td style="color:#000000; background-color:#C0C0C0; text-align:center; " >Anz</td><td style="color:#000000; background-color:#C0C0C0; text-align:center; " >TageKlasse</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">2</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >1</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >34</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >60</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">3</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >2</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >53</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >60</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">4</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >3</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >64</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >120</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">5</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >4</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >34</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >60</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">6</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >5</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >92</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >120</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">7</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >6</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >123</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >180</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">8</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >7</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >86</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >120</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">9</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >8</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >34</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >60</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">10</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >9</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >179</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >180</td></tr></table><br/><a href="http://c.excelhost.de/c_beverly/getfile.php?id=122" onclick="window.open(this.href);return false">Tabellendarstellung in Foren Version 5.42</a><br/><br/>

dann könnte man das mit:

SELECT TblTageKlasse.Anz, Count(TblTageKlasse.Anz) AS AnzahlvonAnz
FROM TblTageKlasse
GROUP BY TblTageKlasse.Anz;


oder mit

SELECT TblTageKlasse.TageKlasse, Count(TblTageKlasse.TageKlasse) AS AnzahlvonTageKlasse
FROM TblTageKlasse
GROUP BY TblTageKlasse.TageKlasse;


oder auch mit:

SELECT TblTageKlasse.Anz, TblTageKlasse.TageKlasse, Count(TblTageKlasse.Anz) AS AnzahlvonAnz
FROM TblTageKlasse
GROUP BY TblTageKlasse.Anz, TblTageKlasse.TageKlasse;


lösen.

mfg
Roland