vinyL Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 Hallo, ich habe ein diverses Problem mit einer Datenbankabfrage. Ich möchte prüfen, ob es Kunden gibt, deren Vorname, Nachname und Geburtsdatum gleich sind und die mehrfach in der Datenbank vorkommen. Jeweils möchte ich dann den seine Referenznummern ausgegeben haben. Hmm, mein Ansatz war wie folgt, aber weiter komme ich nicht wirklich... select pavorname, paname, pagebdat from papatient group by pavorname, paname having (?pagebdat?) bzw. kann man das gewünschte überhaupt in einer Abfrage formulieren? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Joe Kinley Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 select a.pavorname, a.paname, a.pagebdat, a.paid (?) , b.pavorname, b.paname, b.pagebdat, b.paid from papatient a, papatient b WHERE a.pavorname = b.pavorname AND a.paname = b.paname AND a.pagebdat = b.pagebdat AND a.paid <> b.paid Sowas in etwa ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 Ich möchte prüfen, ob es Kunden gibt, deren Vorname, Nachname und Geburtsdatum gleich sind und die mehrfach in der Datenbank vorkommen. select pavorname, paname, pagebdat from papatient group by pavorname, paname, pagebdat having count(*)>1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 26. Juli 2006 Autor Teilen Geschrieben 26. Juli 2006 Hrr, Hrr select pagebdat, paname, pavorname from papatient group by pagebdat, paname, pavorname having count(*)>1 das war auch mein Ansatz in zwischen :marine super Danke dir auf jedenfall für deine Hilfe. Jetzt lass ich noch die RefNr. angeben und dan passt alles Vielen Danke : )) @ Joe Kinley was ist das für SQL was du hast? das geht bei mir überhaupt nicht : ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Joe Kinley Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 Lol.. das is StandardSQL ... musst das Fragezeichen schon wegnehmen.. das hab ich da nur geschrieben weil ich net wusste wie dein ID Feld heisst... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 26. Juli 2006 Autor Teilen Geschrieben 26. Juli 2006 : ) OK, Ich habe hier Übungen zu SQL und der Sinn der Übung war, rauszufinden was HAVING für eine Aufgabe hat <- learning by doing. Dennoch dankeschön ! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Carnie Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 Dann finde ich Kinleys Lösung besser, weil damit die Aufgabe gelöst ist aber es nicht die Standardlösung ist und auch genau an den Absichten der Aufgabe vorbeiführt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 26. Juli 2006 Autor Teilen Geschrieben 26. Juli 2006 ? Aber in der Lösung kommt nicht einmal HAVING vor? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 Das HAVING ist nicht vorhanden weil es auch kein GROUP BY gibt HAVING ist das WHERE des GROUP BY's Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 26. Juli 2006 Autor Teilen Geschrieben 26. Juli 2006 Soweit verständlich : ), Da aber wie schon gesagt der Sinn der Aufgabe ist, HAVING zu verstehen, sollte der Befehl auch verwendet werden ^^ sonst bekomm ich kein bonus bonbon Ich hänge aber immer noch bei diesem Ansatz: select pagebdat, paname, pavorname from papatient group by pagebdat, paname, pavorname having count(*)>1 die RefNr. mit ausgeben zu lassen. Echt schwere Geburt, bin seti 7 Uhr an der Aufgabe beschäftigt...... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Joe Kinley Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 Hehe... wenn da net explizit steht dass man GroupBy verwenden soll, und meine Loesung die Aufgabe korrekt loest (und das tut sie soweit ich das hier sehen kann)... dann ist die Aufgabe doooof Ausserdem musst du bei mir nur die paid in parefnr (oder wie auch immer das RefNr. Feld heisst) umwandeln, und er zeigt sie dir auch an... Bei deiner muesstest du sie in die Select Liste hinzutun, ... lkann da aber sein dass sie dann auch in die groupby kommen muss.. und dann nix rauskommt weil die unterschiedliche refnr zu unterschiedlichen Datensaetzen fuehrt und somit count(*) immer 1 sein wird Bei mir wirds aber weiterhin angezeigt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 SELECT refid,pagebdat, paname, pavorname FROM papatient GROUP BY pagebdat, paname, pavorname HAVING count(pagebdat) >1 AND count(paname) >1 AND count(pavorname) >1 Klappt das so ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 26. Juli 2006 Autor Teilen Geschrieben 26. Juli 2006 Leider nicht : / Server: Nachr.-Nr. 8120, Schweregrad 16, Status 1, Zeile 1 Column 'papatient.PaRefnr' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 Und wenn du die mit ins Group by aufnimmst also SELECT PaRefnr,pagebdat, paname, pavorname FROM papatient GROUP BY pagebdat, paname, pavorname,PaRefnr HAVING count(pagebdat) >1 AND count(paname) >1 AND count(pavorname) >1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 26. Juli 2006 Teilen Geschrieben 26. Juli 2006 SELECT PaRefnr,pagebdat, paname, pavorname FROM papatient GROUP BY pagebdat, paname, pavorname,PaRefnr HAVING count(pagebdat) >1 AND count(paname) >1 AND count(pavorname) >1 Also diesen having ist total unlogisch Es reicht : SELECT PaRefnr,pagebdat, paname, pavorname FROM papatient GROUP BY PaRefnr,pagebdat, paname, pavorname HAVING count(*) >1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 26. Juli 2006 Autor Teilen Geschrieben 26. Juli 2006 Es kommt bei beiden das selbe Ergebnis raus, leider keins. Es werden nur die Spaltennamen angezeigt aber keine Werte. Soll das so? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 1. August 2006 Autor Teilen Geschrieben 1. August 2006 Hmm, nun habe ich eine weitere Frage zu diesem Thema: wieviel Prozent der gültigen Fallnummern Stationär sind? - es sind ALLE Datensätze in Tabelle HoHospitalisation zu zählen - es sind alle "S" in der Tabelle HoHospitalisation zu zählen - es ist die Formel ""Anzahl S" geteilt durch "Anzahl Alle" multipliziert mit 100" zu bilden (hierbei ist "convert" zu verwenden) Ich hätte einen Ansatz, welcher aber durch das Convert eigentlich nicht mehr verwendbar ist.... PS: Die Lösung die ich vorher gesucht hatte, bzw. welche möglich war es in der Datenbank abzufragen, war wie folgt: select PaName, PaVorname, PaGebdat, count(*), Min(parefnr), Max(parefnr)from PaPatient group by PaName, PaVorname, PaGebdat having count(*)>1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Joe Kinley Geschrieben 2. August 2006 Teilen Geschrieben 2. August 2006 Also Convert kenn ich net aber ich haetts so gemacht SELECT a.alle, b.alle_s, ((b.alle_s/a.alle)*100) as ergebnis FROM (SELECT count(*) as alle FROM HoHospitalisation) a, (SELECT count(*) as alle_s FROM HoHospitalisation WHERE name LIKE 'S%') b Aber da kommt ja kein Convert vor Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
isardor Geschrieben 2. August 2006 Teilen Geschrieben 2. August 2006 wandelt convert nicht Zahlen in strings um? hab den Befehl schon in diversen storendProcs gesehen, aber in standard SQL gibt es den wohl nicht. Select a.alle, b.alle_s, convert((b.count(*)/a.count(*))*100) as ergebnis from ( (select count(*) as alle from hohospitalisation) a , (select count(*) as alle_s from hohospitalisation where name like 'S%') b ) bin mir nicht so recht sicher Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 2. August 2006 Autor Teilen Geschrieben 2. August 2006 : /// ja das war auch mein problem, dass convert eben Zahlen in Strings umwandelt. Das Problem ist, dass die Aufgabestellung eben mit convert gelöst werden muss. Ich hätte einfach einen Substring verwendet welcher in etwa so lauten würde select((select count(*) * 100 from HoHospitalisation where HoStatus = 'S' and (HoStorno is null or HoStorno = 0)) / (select count(*) from HoHospitalisation where HoStorno is null or HoStorno = 0)) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
isardor Geschrieben 2. August 2006 Teilen Geschrieben 2. August 2006 ich frage mich nur warum jemand ein mathematisches ergebnis als string haben will, damit kann man doch nicht mehr weiterrechnen. Sinn macht es bei der erzeugung von Views aus datensätzen wenn im name die jeweilige ID angegeben werden soll. z.B. V_View_90 In dem Fall wird dann sowas wie set @ergebnis = exec ('select max(ID) from soundso') define @viewname = 'V_view_'+convert(@ergebnis) Exec ('create view '+ @viewname +' as select * from irgendwas where ID ='+ @ergebnis) go das ist jetzt nur ein Beispiel, aber in Berechnungen hat convert kaum eine Daseinsberechtigung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 2. August 2006 Autor Teilen Geschrieben 2. August 2006 Ja, das kann ich dir auch nicht sagen. Das Ding ist, ich mache momentan ein SQL-Kurs und darin sind klare und strickte Anweisungen, ohne die Anweisungen zu erfüllen, komme ich incht weiter .... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 11. August 2006 Autor Teilen Geschrieben 11. August 2006 Guten Morgen zusammen : )) ich sitze mal wieder hier an den SQL-Lektionen und bin nun an den Punkt join angelangt. Die eigentliche aufgabe ist es mit left und right join zu arbeiten. Nach längerem Googlen und FAQ´s lesen bin ich aber auf so viele joins gestoßen wo ich mir jetzt überhaupt nicht mehr sicher bin was was ist, kann mir einer die joins definieren bitte? wäre super [CROSS] JOIN STRAIGHT_JOIN LEFT [OUTER] JOIN RIGHT [OUTER] JOIN NATURAL LEFT [OUTER] INNER JOIN INNER EQUI JOIN Die eigentliche Aufgabenstellung wäre diese hier, wobei ich aber die lösung selber rausbekommen möchte. Tipp: select * from A join B wirkt anders als select * from A left join B bzw. select * from A right join B Aufgabe: a) wie lautet der SQL-Befehl, der ALLE Aufnahmenummern auflistet und das OP-Datum, wenn vorhanden, für alle stationären, nicht temporären Fälle (Aufnahmenummer / Fallnummer / Fall sind identische Begriffe) Mit "normalen" join -> zb. select count (*) from vsysop join vsysho on horefnr = ophorefnr habe ich schon gearbeitet, aber außer die Anzahl der Zeilen, finde ich kein unterschied zwischen dem left und right join Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
isardor Geschrieben 11. August 2006 Teilen Geschrieben 11. August 2006 'CROSS JOINs die keine WHERE-Klausel aufweisen, erzeugen das kartesische Produkt aus den an der Verknüpfung beteiligten Tabellen. So entspricht die Größe des Resultsets eines kartesisches Produkts der Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle.' Laut MSDN STRAIGHT_JOIN Keine ahnung OUTER JOIN: Alle Zeilen aus beiden Tabellen werden in einer vollständigen äußeren Verknüpfung zurückgegeben. (Auch diejenigen die nicht mit der andern Verknüpften Zeile übereinstimmen) NATURAL LEFT [OUTER] keine Ahnung INNER JOIN Entspricht einer Where-Klausel INNER EQUI JOIN sagt mir nichts zu a) Einen unterschied zwischen Left und Right Join kannst du erst erkennen wenn sowohl in der linken als auch in der rechten tabelle zellen mit dem wert NULL vorhanden sind. bei Left join werden auch Tabellenfelder aus der Rechten tabelle angezeigt, die NULL enthalten, und bei Right Join werden auch die Felder auf der Linken Seite angezeigt, die NULL enthalten. Ach mit mit wlchem RDMS arbeitest du da eigentlich? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
vinyL Geschrieben 11. August 2006 Autor Teilen Geschrieben 11. August 2006 MS SQL Enterprise Manager 8.0 und den Querry Analyser ist auf ein Windows 2003 Server augesetzt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.