Forrige tråd
Neste tråd
Print tråd

SQL-nøtt

SQL-nøtt #1863530 25/09/2014 17:05
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Hei jeg trenger hjelp til en SQL nøtt,er det noen eksperter i salen:

Lag en spørring som viser hvilke deler det må bestilles flere av. Tips: For hver gave er det mulig å finne ut antallet som trengs av hver enkelt del (ant), og ønskelisten forteller hvor mange av hver gave som må produseres (for å oppfylle alle ønsker). En del kan imidlertid inngå i flere ulike gaver. Dette kan brukes for å beregne behovet for hver del. For å avgjøre om det må bestilles flere enheter må behovet sammenholdes med nåværende lagerstatus for hver del (lager_ant). Merk: Generelt kan noen av ønskene allerede være ferdig produsert, og skal i så fall ikke telles med i beregning av behovet.
Tabellene er : gave, del,oppbygging, person, onske
Hjelp hode koker litt


Re: SQL-nøtt [Re: ] #1863544 25/09/2014 17:35
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
He he alt er komplisert når man prøver seg som student etter fylte førti.
Ser fornuftig ut Takk for hjelpen


Re: SQL-nøtt [Re: Morteen] #1863556 25/09/2014 18:06
Registrert: Apr 2011
Innlegg: 527
Odinpodin Offline
Avhengig
Offline
Avhengig
Registrert: Apr 2011
Innlegg: 527
Fikk du til? tror jeg ville ha løst det med subselect men er ikke helt sikker på oppgaven, spesielt ikke dette med personer og ønsker. Og i hvilken tabell har du lagerbeholdning?

Select del, sum(ant_deler) from
(
select del, ant_deler from oppbygging
)
group by del


"Don’t buy upgrades, ride up grades." Merckx
Re: SQL-nøtt [Re: Morteen] #1863559 25/09/2014 18:10
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Lagerbeholdning er i tabell DEL som LAGER_ANT


Re: SQL-nøtt [Re: Morteen] #1863563 25/09/2014 18:36
Registrert: Apr 2011
Innlegg: 527
Odinpodin Offline
Avhengig
Offline
Avhengig
Registrert: Apr 2011
Innlegg: 527
Først må vi summere antall deler som trengs, uavhenig produkt(gave), og deler som trengs finner vi i oppbygging(tror jeg?). Så tar vi antall deler som trengs minus antall på lager.. er vel så enkelt?

Select del, sum(ant_deler)-(sum(ant_lager)) as må_bestilles from
(
select a.del, a.ant_deler, b.ant_lager from oppbygging a
left join del b on (a.del_id = b.del_id)
)
group by del

Redigert av Odinpodin; 25/09/2014 18:48.

"Don’t buy upgrades, ride up grades." Merckx
Re: SQL-nøtt [Re: Morteen] #1863579 25/09/2014 19:18
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
SELECT d.dnr, SUM( d.lager_ant ) - SUM( o.ant ) AS må_bestilles
FROM del AS d, oppbygging AS o
WHERE d.dnr = o.dnr
GROUP BY d.navn

Tabell 'del' har kolonner: dnr navn lager _ant
Tabell 'oppbygging'har kolonner: gnr, dnr, ant.
Jeg trenger ting inn med teskje :-)


Re: SQL-nøtt [Re: Morteen] #1863581 25/09/2014 19:26
Registrert: Jun 2008
Innlegg: 387
T
TEK Offline
Entusiast
Offline
Entusiast
T
Registrert: Jun 2008
Innlegg: 387
Hadde vært litt enklere om du hadde lagt ut et skjema over alle tabellene...
Det kan du enkelt sette opp i SQL Server dersom det er det du bruker...

Eventuelt i ERWin eller de fleste andre databasemodelleringsprogrammer. Fortrinnsvis med relasjonene mellom tabellene også...


Scott Spark RC 2011
Hard Rocx Equilibrium Cambrium Discimus 2007
Re: SQL-nøtt [Re: Morteen] #1863633 25/09/2014 20:54
Registrert: Apr 2011
Innlegg: 527
Odinpodin Offline
Avhengig
Offline
Avhengig
Registrert: Apr 2011
Innlegg: 527
Sitat: Morteen
SELECT d.dnr, SUM( d.lager_ant ) - SUM( o.ant ) AS må_bestilles
FROM del AS d, oppbygging AS o
WHERE d.dnr = o.dnr
GROUP BY d.navn

Tabell 'del' har kolonner: dnr navn lager _ant
Tabell 'oppbygging'har kolonner: gnr, dnr, ant.
Jeg trenger ting inn med teskje :-)


Den spørringer du har der funker ikke?
Som Tek sier blir det mye enklere hvis du legger med ett skjema over tabellene, kanskje med ett eksempel på hvordan du ser for deg resultatsettet skal se ut.

Jeg ville ha gjort den spørringen du har over slik:

SELECT d.dnr, SUM(d.lager_ant) - SUM(o.ant) AS må_bestilles
FROM del d
left join oppbygging o on (o.dnr = d.dnr)
GROUP BY d.navn


"Don’t buy upgrades, ride up grades." Merckx
Re: SQL-nøtt [Re: Morteen] #1863640 25/09/2014 21:10
Registrert: Jun 2008
Innlegg: 387
T
TEK Offline
Entusiast
Offline
Entusiast
T
Registrert: Jun 2008
Innlegg: 387
OK - ble jo litt moro så jeg måtte finne ut av det.
Gitt at:
- Ønskeliste ikke har noe relevant informasjon i denne sammenhengen
- En gave kan være produsert eller ikke
- En gave kan bestå av mange deler. En del kan inngå i mange gaver
- Tabellen oppbygning beskriver hvilke, og hvor mange, deler en gave består av

Og at vi har disse tabellene
gave (gnr, navn, produsert)
del (dnr, dnavn, lager_ant)
oppbygning (gnr, dnr, ant)

Så kan vi først finne antall deler bestilt for alle gaver ved å bruke denne spørringen:
select o.dnr, sum(ant) as best_ant from oppbygning o
group by o.dnr

Dette vil gi oss en liste med følgende kolonner
dnr, best_ant
hvor best_ant naturligvis er det bestilte antall av den gitte delen.

Men, vi vil også sikkert også vite navn på delen og antall vi faktisk har på lager. For å få til dette må vi inkludere informasjon fra del tabellen. Dette kan vi gjøre ved å joine inn informasjon fra del tabellen, slik som dette:
select d.dnr, d.dnavn, lager_ant, sum(ant) as best_ant
from oppbygning o join del d on o.dnr = d.dnr
group by d.dnr, d.dnavn, lager_ant

(de to siste grupperingsfeltene er med fordi sql syntaksen krever det, de har ingen egentlig betydning)

Dette gir oss en tabell med følgende informasjon
dnr, dnavn, lager_ant, best_ant

Men da vet vi fortsatt ikke hvor mange vi må bestille. For å finne ut det må vi finne summen av lager_ant minus det bestilte antallet.
Noe vi får om vi utvider spørringen over som følger:
select d.dnr, d.dnavn, lager_ant, sum(ant) as best_ant, lager_ant-sum(ant) as lager_diff
from oppbygning o join del d on o.dnr = d.dnr
group by d.dnr, d.dnavn, lager_ant


Nå begynner vi å nærme oss. Men vi har fortsatt ikke tatt hensyn til om gaven er produsert eller ikke. Det kan vi gjøre ved å joine inn informasjon fra gaven, og bruke det for å filtrere slik at vi kun teller opp det som ikke er produsert.
Da må vi utvide spørringen over slik at den blir som følger:
select d.dnr, d.dnavn, lager_ant, sum(ant) as best_ant, lager_ant-sum(ant) as lager_diff
from oppbygning o join del d on o.dnr = d.dnr join gave g on o.gnr = g.gnr
where g.produsert = 0

group by d.dnr, d.dnavn, lager_ant


Resultatet vil se helt likt ut som før, men nå har vi tatt hensyn til om gaven er produsert eller ikke.

Det gjenstår en liten utfordring for å justert listen slik at den kun inneholder de som har en negativ lager_diff, altså de det skal bestilles noe av - men litt utfordringer må du jo ha selv ;-)


Redigert av TEK; 25/09/2014 21:14.

Scott Spark RC 2011
Hard Rocx Equilibrium Cambrium Discimus 2007
Re: SQL-nøtt [Re: Morteen] #1863645 25/09/2014 21:20
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Den siste fikk jeg kjørt,med et resultat. Prøver den siste.Takk for hjelpen !


Re: SQL-nøtt [Re: Morteen] #1864134 26/09/2014 17:42
Registrert: Jun 2008
Innlegg: 387
T
TEK Offline
Entusiast
Offline
Entusiast
T
Registrert: Jun 2008
Innlegg: 387
Stort sett så gjelder det å isolere problemstillingene, begynne enkelt også bygge på med flere ting etterhvert...
Men man må nesten ha noe å teste ut spørringene på, du skal være innmari god om du klarer å skrive SQL setninger kun "på papiret".


Scott Spark RC 2011
Hard Rocx Equilibrium Cambrium Discimus 2007
Re: SQL-nøtt [Re: Morteen] #1864435 27/09/2014 10:58
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Uansett imponerende jobbet,selv om jeg tror svaret skulle være noe enklere.Vi har bare hatt 4 forelesninger,og bare såvidt hatt noe om ytre koblinger.


Re: SQL-nøtt [Re: Morteen] #1864752 27/09/2014 20:53
Registrert: Apr 2011
Innlegg: 527
Odinpodin Offline
Avhengig
Offline
Avhengig
Registrert: Apr 2011
Innlegg: 527
oracle sertifisering du driver med eller?
ytre koblinger er veldig viktig i relasjonsdatabaser så det kommer du nok til å få høre nok om.


"Don’t buy upgrades, ride up grades." Merckx
Re: SQL-nøtt [Re: Morteen] #1864808 28/09/2014 06:37
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Nei jeg tar et høyskole kurs om databaser og SQL generelt.



Moderator  support