Bekanta dig med den information du har:
Det första viktiga är att förstå vilken data du har. Här i det här fallet har du fyra bord
- Försäkringsbolag
- Patient
- Läkare
- Besök
Ditt mål:
Hitta listan över alla patienter som besökt alla ortopeder (specialiteter) associerade med deras försäkringsbolag.
Låt oss ta ett steg tillbaka och analysera det i mindre bitar:
Generellt sett kan kraven vara lite överväldigande när man ser dem på det hela taget. Låt oss dela upp kraven i mindre komponenter för att förstå vad du behöver göra.
- Del a: Du måste hitta listan över läkare vars specialitet är 'Ortoped'
- Del b: Hitta listan över patienter som besökte läkare som identifierats i #1.
- Del c: Filtrera resultatet #2 för att hitta listan över patienter och läkare som delar samma försäkringsbolag.
- Del d: Ta reda på att patienterna som besökte var och en av dessa Ortopeder som tillhör samma försäkringsbolag som patienten gör.
Hur man närmar sig:
-
Du måste identifiera ditt huvudmål, här i det här fallet för att identifiera listan över patienter. Så fråga patienttabellen först.
-
Du har patienterna, faktiskt alla men vi måste hitta vilka av dessa patienter som besökte läkarna. Låt oss inte oroa oss för om läkaren är en ortoped eller inte. Vi behöver bara listan över patienter och de läkare som de har besökt. Det finns ingen kartläggning mellan patient- och läkaretabellen. För att ta reda på denna information,
Gå med i tabellen Patient med besök i rätt nyckelfält.
Sätt sedan samman resultatet med tabellen Läkare på rätt nyckelfält.
-
Om du har gjort anslutningen korrekt bör du nu ha en lista över alla patienter och läkare som de har besökt. Om du använde
LEFT OUTER JOIN
, hittar du även patienter som aldrig hade besökt en läkare. Om du användeRIGHT OUTER JOIN
, hittar du bara de patienter som besökt en läkare. -
Nu har du alla patienter och läkare som de har besökt. Kravet är dock att endast hitta de läkare som är Ortopeder . Så använd villkoret för att filtrera resultatet för att bara ge det önskade resultatet.
-
Du har nu uppnått kraven som delas upp i mindre komponenter i del a och del b . Du måste fortfarande filtrera det av försäkringsbolagen. Här är det knepiga, kravet säger inte att du behöver visa försäkringsbolaget, så vi behöver inte använda tabellen Försäkringsbolag. Din nästa fråga är
'How am I going to filter the results?'
. Giltig punkt. Ta reda på om någon av de tre tabellernaPatient
,Doctor
ochVisits
innehålla försäkringsbolagsinformationen.Patient
ochDoctor
har ett gemensamt område. Gå med i det gemensamma fältet för att filtrera resultatet. -
Hitta antalet unika ortopeder som varje patient har besökt.
-
Här är den del som kan göras på många sätt, ett av sätten att göra detta skulle vara att lägga till en underfråga som skulle vara din fjärde kolumn i utdata. Denna underfråga skulle fråga tabellen Läkare och filtrera efter specialitet ='Ortoped'. Utöver det filtret måste du också filtrera genom att matcha försäkringsbolaget på den inre tabellen med försäkringsbolags-id i tabellen Patienter som finns på huvudfrågan. Denna underfråga kommer att returnera antalet ortopeder för försäkringsbolags-id som matchar patientens data.
-
Du bör nu ha fälten
patient id
,patient name
,patients visits count
och dettotal number of Orthopedists in same insurance company
från underfrågan. Du kan sedan lägga till en yttre sammanfogning som filtrerar resultaten från denna härledda tabell i fälten därpatients visits count
matchar medtotal number of Orthopedists in same insurance company
. Jag säger inte att detta är det bästa tillvägagångssättet. Det här är ett tillvägagångssätt som jag kan tänka mig. -
Om du följer logiken ovan bör du ha detta.
Lista över patienter som har besökt alla läkare
Filtreras av endast läkare, vars är ortopeder
Filtreras av patienter och läkare som delar samma försäkringsbolagsinformation.
Återigen, hela utdata filtreras sedan av de två räknefälten som finns inuti den härledda tabellens utdata.
Bollen är på din plan:
- Testa steg för steg och när du hittar svaret. Lägg upp det här som ett separat svar. Jag kommer att rösta upp det för att kompensera för alla nedröster som du fick på den här frågan.
Jag är övertygad om att du kan göra detta enkelt.
Om du snubblar...
Tveka inte att posta dina frågor som comments to this answer
, andra och jag hjälper dig gärna.
Ansvarsfriskrivning
Jag har gett ett av många sätt hur denna logik kan implementeras. Jag är säker på att det finns många sätt att implementera detta på ett mycket bättre sätt.
Resultat:
Se @Ofek Rons svar för den korrekta frågan som ger önskad utdata. Jag skrev inte någon del av frågan. Det var hela OP:s ansträngning.