BuX
gar nich lieb
|
ich kann meine sql abfrage nirgends finden noe, scherz beiseite: ich habe n problem mit einer abfrage: table in dem es u.a. die werte 'form', date und time gibt. form hat werte zwischen 1 und 10, und jetzt brauch ich ne ausgabe, die mir 10 zeilen ausgibt mit den aktuellsten date-time feldern, jeweils eins mit form 1, eins mit form 2 ... bis 10 halt. danke, BuX edit: ahja, diese abfrage gibt mir nur die erste aus (und das is leider die aelteste eingegebene) $abfrage="SELECT form, uschrift, beitrag, username, time, date,visits,zahl_beitrag FROM forum GROUP BY form ORDER BY date DESC, time DESC";
Bearbeitet von BuX am 08.01.2007, 17:52
|
kleinerChemiker
Here to stay
|
dann mach aus desc ein asc
und frag pro forum ab und hängs mit union zusammen.
SELECT form, uschrift, beitrag, username, time, date,visits,zahl_beitrag FROM forum WHERE form =1 ORDER BY date ASC, time ASC LIMIT 10 UNION SELECT form, uschrift, beitrag, username, time, date,visits,zahl_beitrag FROM forum WHERE form =2 ORDER BY date ASC, time ASC LIMIT 10 UNION...
|
BuX
gar nich lieb
|
herzlichen dank.. ich hab gar net dran dacht *doH* danke funzt
|
prayerslayer
Oar. Mh.
|
huha, ich such ein ähnliches statement nämlich eines, welches mir einfach die ergebnisse von mehreren statements (die alle gleich viel rows zurückgeben) "merged". sowas wie union, nur dass die spalten der verschiedenen statements erhalten bleiben. z.b. such ich mir die altersverteilung von personen heraus und will nach männlich/weiblich trennen. in dem ergebnis sollen die spalten "alter", "gesamt", "männlich", "weiblich" vorhanden sein. weil ich aber nicht weiß, wie ich das in einem statement machen soll, will ich die ersten beiden spalten mit einem statement und die nächsten 2 mit 2 anderen machen. ungefähr klar? und hat wer eine lösung auch? tia!
|
kleinerChemiker
Here to stay
|
huh? nix is klar bei mir. suchst du vielleicht ein join?
|
prayerslayer
Oar. Mh.
|
hm... ich such was, um statements zu joinen (und nicht tabellen). die wirkung soll ähnlich wie die eines joins sein, aber ich will statements dafür angeben. aber klar, was ich als ergebnis haben will? folgende tabelle Alter | Gesamt | Männlich | Weiblich
14 | 100 | 25 | 75
das ist alles das gleiche statement, nur leicht angepasst. deswegen such ich sowas.
|
tinker
SQUEAK
|
SELECT distinct(alter) as Alter,
(SELECT Count(*) from blafasl b1 where b1.alter = b.alter) as Gesamt,
(SELECT Count(*) from blafasl b2 where b2.alter = b.alter and b2.geschlecht = "m") as Männlich,
(SELECT Count(*) from blafasl b3 where b3.alter = b.alter and b3.geschlecht = "f") as Weiblich
FROM blafasl b;
sollte ja funktionieren, oder? (ich geh halt davon aus das alle informationen in einer Table stehn) edit: In der Table blafasl stehn halt die Daten der Person, also Name, Adresse usw und eben auch Alter und Geschlecht.
Bearbeitet von tinker am 07.04.2008, 13:41
|
prayerslayer
Oar. Mh.
|
SELECT distinct(alter) as Alter,
(SELECT Count(*) from blafasl b1 where b1.alter = b.alter) as Gesamt,
(SELECT Count(*) from blafasl b2 where b2.alter = b.alter and b2.geschlecht = "m") as Männlich,
(SELECT Count(*) from blafasl b3 where b3.alter = b.alter and b3.geschlecht = "f") as Weiblich
FROM blafasl b;
sollte ja funktionieren, oder? (ich geh halt davon aus das alle informationen in einer Table stehn)
nice attempt, hab ich auch schon probiert. nur die daten sind in 2 tabellen und der sql server meint, ich darf im select-teil keine subselects haben, die mehr als 1 row zurückgeben? ich hab folgendes statement: SELECT 2008-YEAR(Klient.GeschaetztesGebJahr) AS AlterInJahren, COUNT(*) AS Gesamt
FROM Beratung INNER JOIN Klient ON (Klient_KlientID=KlientID)
WHERE Beratung.Datum BETWEEN '2007-01-01T00:00:00.000' AND '2008-02-24T00:00:00.000'
GROUP BY 2008-YEAR(Klient.GeschaetztesGebJahr)
ORDER BY 1
damit bekomm ich: AlterInJahren | Gesamt
14 | 341
15 | 124
und so weiter. für männlich/weiblich nehm ich das gleiche statement und geb noch was in der where-klausel dazu und fertig. in einem statement weiß ich nicht, wie es geht, deswegen will ich mehr verwenden.
Bearbeitet von prayerslayer am 07.04.2008, 13:46
|
ica
hmm
|
ich hab keine ahnung was du wirklich willst
|
tinker
SQUEAK
|
hm, wie sind die daten auf die beiden tables aufgeteilt? und die subselects sollten eh nur eine row bzw. nur einen wert zurückliefern
@ica: er hat ne table (ok, 2) in der alle personen aus wwi drin sind zu denen natürlich auch alter und geschlecht gespeichert sind. und jetzt will er halt wissen wieviele zb. 14 Jährige in diesem System erfasst sind und wieviele davon männlich und weiblich...
Bearbeitet von tinker am 07.04.2008, 13:49
|
tinker
SQUEAK
|
damn quote
|
prayerslayer
Oar. Mh.
|
ah... heut ist kein guter tag. ich hab in der klienten-tabelle ein geschaetztes geburtsjahr drin, daraus rechne ich mir das alter. in 2 tabellen sind die daten, weil nur die klienten gezählt werden sollen, die eine beratung in einem gewissen zeitraum in anspruch genommen haben. ich hoff, der edit oben gibt ein bissi mehr aufschluss, sonst geb ichs nämlich auf und geh nach hause... //edit: das geht sicher nicht, ich komm nämlich grad drauf, dass die anzahl an rows nicht immer die gleiche sein muss muss also eine andere lösung finden...
Bearbeitet von prayerslayer am 07.04.2008, 13:56
|
tinker
SQUEAK
|
SELECT distinct(2008-YEAR(k.GeschaetztesGebJahr)) AS AlterInJahren,
(SELECT count(*) from Klient k2 inner join beratung b on (Klient_KlientID=KlientID) WHERE k.GeschaetztesGebJahr = k2.GeschaetztesGebJahr and b.Datum BETWEEN '2007-01-01T00:00:00.000' AND '2008-02-24T00:00:00.000') as Gesamt,
(SELECT count(*) from Klient k3 inner join beratung b1 on (Klient_KlientID=KlientID) WHERE k.GeschaetztesGebJahr = k3.GeschaetztesGebJahr and k3.geschlecht = "maennlich" and b1.Datum BETWEEN '2007-01-01T00:00:00.000' AND '2008-02-24T00:00:00.000') as Maennlich,
(SELECT count(*) from Klient k4 inner join beratung b2 on (Klient_KlientID=KlientID) WHERE k.GeschaetztesGebJahr = k4.GeschaetztesGebJahr and k4.geschlecht = "weiblich" and b2.Datum BETWEEN '2007-01-01T00:00:00.000' AND '2008-02-24T00:00:00.000') as Weiblich,
FROM Klient k
ORDER BY 1
edit: code gefixt edit2: könnt sein das du im on des joins im subselect die tabelle angeben musst, weiß jetz aber nicht in welcher table KlientID und wo Klient_KlientID steht (habs schon so und so mal gesehn)
Bearbeitet von tinker am 07.04.2008, 14:05
|
prayerslayer
Oar. Mh.
|
SELECT distinct(2008-YEAR(k.GeschaetztesGebJahr)) AS AlterInJahren,
(SELECT count(*) from Klient k2 inner join beratung b on (Klient_KlientID=KlientID) WHERE k.GeschaetztesGebJahr = k2.GeschaetztesGebJahr and b.Datum BETWEEN '2007-01-01T00:00:00.000' AND '2008-02-24T00:00:00.000') as Gesamt,
(SELECT count(*) from Klient k3 inner join beratung b1 on (Klient_KlientID=KlientID) WHERE k.GeschaetztesGebJahr = k3.GeschaetztesGebJahr and k3.geschlecht = "maennlich" and b1.Datum BETWEEN '2007-01-01T00:00:00.000' AND '2008-02-24T00:00:00.000') as Maennlich,
(SELECT count(*) from Klient k4 inner join beratung b2 on (Klient_KlientID=KlientID) WHERE k.GeschaetztesGebJahr = k4.GeschaetztesGebJahr and k4.geschlecht = "weiblich" and b2.Datum BETWEEN '2007-01-01T00:00:00.000' AND '2008-02-24T00:00:00.000') as Weiblich,
FROM Klient k
ORDER BY 1
edit: code gefixt
bam oida bist mei hawi, ich hab zwar auch eine lösung gehabt, die war aber komplizierter und hat länger gedauert. da hab ich nämlich wirklich die 3 statements mit joins zusammengehängt danke!
|
tinker
SQUEAK
|
Kleiner Schönheitsfehler: Im äußersten Select solltest auch noch mit der Beratung joinen und auf Datum abfragen weil sonst kanns sein das er die subselects um sonst macht wenn es zb 13jährige Klienten gibt aber noch keiner von denen bei ner Beratung war. Ansonsten: np, man hat ja Zeit in der Arbeit.
Bearbeitet von tinker am 07.04.2008, 14:30 (logik)
|