Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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 ?

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

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

Lol.. das is StandardSQL ... musst das Fragezeichen schon wegnehmen.. das hab ich da nur geschrieben weil ich net wusste wie dein ID Feld heisst...

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

? Aber in der Lösung kommt nicht einmal HAVING vor?

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

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

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.

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


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

Es kommt bei beiden das selbe Ergebnis raus, leider keins. Es werden nur die Spaltennamen angezeigt aber keine Werte. Soll das so?

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

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

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

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

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

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

  • 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

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

MS SQL Enterprise Manager 8.0 und den Querry Analyser ist auf ein Windows 2003 Server augesetzt

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.