Zum Inhalt springen

SQL-Abfrage


vinyL

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 : )

Link zu diesem Kommentar
Auf anderen Seiten teilen

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......

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen


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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

: /// 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))

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

'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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...