Avatar billede keepy Seniormester
06. januar 2017 - 23:37 Der er 5 kommentarer

Stored Procedure

Hej
Håber der er en der kan hjælpe.

Jeg har følgende:
Tabel AAA indeholder AAA_Id'er
Tabel B_gruppe indeholder B_Gruppe_Id  og AAA_Id
Tabel C indeholder C_Id og B_Gruppe_Id
Tabel ca indeholder C_Id og AAA_Id

Hvordan laves en SP der ved et valg med C_Id og B_Gruppe_Id giver følgende resultat?

1. Alle AAA_Id'er skal altid vises
2. Hvis en ralation mellem B_Gruppe_Id og C_Id findes mærkeres denne i AAA_Id listen som valgt.
3. Hvis der ikke er en  ralation mellem C_Id og B_Gruppe_Id skal resultatet være som punkt 1 - Altså hvis en C_Id findes men ikke har en B_Gruppe_Id på sig i tabel c.
4. Hvis en C_Id ikke findes skal resultatet være som punkt 1.

Jeg har prøvet at Join mig ud af det, men jeg kan bare ikke få det til lykkes.
Avatar billede terry Ekspert
07. januar 2017 - 10:14 #1
can you give an example of your data, and also what you expect to see in result?
Avatar billede keepy Seniormester
07. januar 2017 - 14:26 #2
Input er eksempler for at vise at hvis en C_Id eller B_Gruppe_Id ikke er oprettet, bliver ingen valgt.

Tabel AAA
AAA_Id = 1
AAA_Id = 2
AAA_Id = 3
AAA_Id = 4
AAA_Id = 5

Tabel B_gruppe
B_Gruppe_Id = 1, AAA_Id = 1
B_Gruppe_Id = 1, AAA_Id = 2
B_Gruppe_Id = 1, AAA_Id = 3
B_Gruppe_Id = 1, AAA_Id = 4
B_Gruppe_Id = 1, AAA_Id = 5

B_Gruppe_Id = 2, AAA_Id = 1
B_Gruppe_Id = 2, AAA_Id = 2
B_Gruppe_Id = 2, AAA_Id = 3
B_Gruppe_Id = 2, AAA_Id = 4
B_Gruppe_Id = 2, AAA_Id = 5

Tabel C
C_Id = 1, B_Gruppe_Id = 1
C_Id = 2, B_Gruppe_Id = 2

Tabel CA
C_Id = 1, AAA_Id = 1
C_Id = 1, AAA_Id = 2
C_Id = 1, AAA_Id = 3

C_Id = 2, AAA_Id = 1
C_Id = 2, AAA_Id = 4

Resultat 1:

Input C_Id = 1 og B_Gruppe_Id = 1:
output
AAA_Id = 1 valgt
AAA_Id = 2 valgt
AAA_Id = 3 valgt
AAA_Id = 4
AAA_Id = 5

Resultat 2:

Input C_Id = 1 og B_Gruppe_Id = 2:
output
AAA_Id = 1 valgt
AAA_Id = 2
AAA_Id = 3
AAA_Id = 4 valgt
AAA_Id = 5

Resultat 3:

Input C_Id = 3 og B_Gruppe_Id = 2:
output
AAA_Id = 1
AAA_Id = 2
AAA_Id = 3
AAA_Id = 4
AAA_Id = 5

Resultat 4:

Input C_Id = 3 og B_Gruppe_Id = 6:
output
AAA_Id = 1
AAA_Id = 2
AAA_Id = 3
AAA_Id = 4
AAA_Id = 5

Resultat 5:

Input C_Id = 1 og B_Gruppe_Id = 6:
output
AAA_Id = 1
AAA_Id = 2
AAA_Id = 3
AAA_Id = 4
AAA_Id = 5
Avatar billede terry Ekspert
08. januar 2017 - 11:14 #3
Dont seem to be able to get my head around this, so cant help, sorry.
Avatar billede keepy Seniormester
16. januar 2017 - 08:02 #4
Ok thanks for trying
Avatar billede kjulius Novice
14. marts 2017 - 20:54 #5
Hmm.. er det ikke bare en  OUTER JOIN til en C+B kombien?
Men det her bliver rent gætteri, for jeg har heller ikke styr på, hvilke felter der er relationer mellem. Det synes jeg er ret "ufortalt".

SELECT AAA.*, CB.B_Gruppe_Id, CB_C_Id
FROM AAA
LEFT OUTER (
SELECT B_Gruppe.B_Gruppe_Id, B_Gruppe.AAA_Id, C.C_Id
FROM B_gruppe
INNER JOIN C ON C.B_Gruppe_Id = B_Gruppe.B_Gruppe_Id) AS CB ON CB.AAA_Id = AAA.AAA_Id

Eller med en lidt anden notation, som jeg personligt foretrækker:

WITH CB_Kombi AS (
SELECT B_Gruppe.B_GruppeId, B_Gruppe.AAA_Id, C.C_Id
FROM B_gruppe
INNER JOIN C ON C.B_Gruppe_Id = B_Gruppe.B_Gruppe_Id)

SELECT AAA.*, CB.B_Gruppe_Id, CB_C_Id
FROM AAA
LEFT OUTER JOIN CB_Kombi  ON CB_Kombi.AAA_Id = AAA.AAA_Id

Hmm... men hvor passer din tabel CA ind?
Totalt forvirrende.. Bedre tabelnavne ville også hjælpe, sammen med tabel/felt relationerne.

Nå, måske hjælper det alligevel lidt...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester