|
| Flere tabeller knyttet sammen - .lidt indv~ Fra : Ukendt |
Dato : 04-05-08 19:45 |
|
Jeg har 3 tabeller
KLASSE
Klasse, pk
Budget
VARE
ID, pk
Navn
Beskrivelse
Pris
POSTERINGER
ID, pk
Dato
Klasse, fk
VareID, fk
Antal
Kan jeg i en grid få vist følgende oplysninger (en liste over køb i en
enkelt klasse)
- Klasse, dato, varenavn (ikke ID), antal, varens á pris, samlet pris -
Samt det samlede forbrug for klassen ved at lægge den samlede pris for
samtlige linier for klassen sammen.
| |
Kristian Damm Jensen (05-05-2008)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 05-05-08 15:01 |
|
Michael Sørensen wrote:
> Jeg har 3 tabeller
>
> KLASSE
> Klasse, pk
> Budget
>
> VARE
> ID, pk
> Navn
> Beskrivelse
> Pris
>
> POSTERINGER
> ID, pk
> Dato
> Klasse, fk
> VareID, fk
> Antal
>
> Kan jeg i en grid få vist følgende oplysninger (en liste over køb i en
> enkelt klasse)
>
> - Klasse, dato, varenavn (ikke ID), antal, varens á pris, samlet pris
>
> Samt det samlede forbrug for klassen ved at lægge den samlede pris for
> samtlige linier for klassen sammen.
Du beder om både at få detaljer og summering i samme søgning. Det kan i
princippet ikke lade sig gøre. Men man kan kombinerer to søgninger til én og
fx lave
select klasse, dato, varenavn, antal, pris, pris*antal,
(select sum(antal*pris)
from posteringer p2
join klasse k2
on p2.klasse = k2.klasse
join vare v2
on v2.ID = p2.vareID
where k2.klasse = p.klasse
)
from posteringer p
join vare v
on v.id = p.vareID
--
Venlig hilsen /Best regards
Kristian Damm Jensen
| |
Ukendt (05-05-2008)
| Kommentar Fra : Ukendt |
Dato : 05-05-08 18:35 |
|
"Kristian Damm Jensen" <dNOamSPm.uAMsenet@kristiandamm.dk> skrev i en
meddelelse news:481f1d2b$0$15895$edfadb0f@dtext01.news.tele.dk...
> Michael Sørensen wrote:
>> Jeg har 3 tabeller
>>
>> KLASSE
>> Klasse, pk
>> Budget
>>
>> VARE
>> ID, pk
>> Navn
>> Beskrivelse
>> Pris
>>
>> POSTERINGER
>> ID, pk
>> Dato
>> Klasse, fk
>> VareID, fk
>> Antal
>>
>> Kan jeg i en grid få vist følgende oplysninger (en liste over køb i en
>> enkelt klasse)
>>
>> - Klasse, dato, varenavn (ikke ID), antal, varens á pris, samlet pris
>>
>> Samt det samlede forbrug for klassen ved at lægge den samlede pris for
>> samtlige linier for klassen sammen.
>
> Du beder om både at få detaljer og summering i samme søgning. Det kan i
> princippet ikke lade sig gøre. Men man kan kombinerer to søgninger til én
> og fx lave
De to ovennævnte ting må gerne være adskilt for min skyld. de behøver ikke
blive vist sammen.
Kan man i øvrigt hente VARENAVN i stedet for VAREID, når det er VAREID, der
er gemt i tabellen POSTERINGER, mens det tilhørende VARENAVN er i tabellen
VARER.
> select klasse, dato, varenavn, antal, pris, pris*antal,
> (select sum(antal*pris)
> from posteringer p2
> join klasse k2
> on p2.klasse = k2.klasse
> join vare v2
> on v2.ID = p2.vareID
> where k2.klasse = p.klasse
> )
> from posteringer p
> join vare v
> on v.id = p.vareID
Kan jeg ikke få dig til at kommentere ovenstående, da jeg er faret vild -
allerede i 1. linie - selvom jeg har styr på simpel SQL.
| |
Kristian Damm Jensen (05-05-2008)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 05-05-08 20:43 |
|
Michael Sørensen wrote:
> "Kristian Damm Jensen" <dNOamSPm.uAMsenet@kristiandamm.dk> skrev i en
> meddelelse news:481f1d2b$0$15895$edfadb0f@dtext01.news.tele.dk...
>> Michael Sørensen wrote:
>>> Jeg har 3 tabeller
>>>
>>> KLASSE
>>> Klasse, pk
>>> Budget
>>>
>>> VARE
>>> ID, pk
>>> Navn
>>> Beskrivelse
>>> Pris
>>>
>>> POSTERINGER
>>> ID, pk
>>> Dato
>>> Klasse, fk
>>> VareID, fk
>>> Antal
>>>
>>> Kan jeg i en grid få vist følgende oplysninger (en liste over køb i
>>> en enkelt klasse)
>>>
>>> - Klasse, dato, varenavn (ikke ID), antal, varens á pris, samlet
>>> pris Samt det samlede forbrug for klassen ved at lægge den samlede pris
>>> for samtlige linier for klassen sammen.
>>
>> Du beder om både at få detaljer og summering i samme søgning. Det
>> kan i princippet ikke lade sig gøre. Men man kan kombinerer to
>> søgninger til én og fx lave
>
> De to ovennævnte ting må gerne være adskilt for min skyld. de behøver
> ikke blive vist sammen.
Godt. Det bliver også en betydelig enklere sql.
> Kan man i øvrigt hente VARENAVN i stedet for VAREID, når det er
> VAREID, der er gemt i tabellen POSTERINGER, mens det tilhørende
> VARENAVN er i tabellen VARER.
Ja. prøv at læse på "join".
>> select klasse, dato, varenavn, antal, pris, pris*antal,
>> (select sum(antal*pris)
>> from posteringer p2
>> join klasse k2
>> on p2.klasse = k2.klasse
>> join vare v2
>> on v2.ID = p2.vareID
>> where k2.klasse = p.klasse
>> )
>> from posteringer p
>> join vare v
>> on v.id = p.vareID
>
> Kan jeg ikke få dig til at kommentere ovenstående, da jeg er faret
> vild - allerede i 1. linie - selvom jeg har styr på simpel SQL.
Vi splitter den lige i to, som du selv foreslog:
Først den enkle del, der henter detaljeoplysninger fra posteringer.
select p.klasse, p.dato, p.antal, v.varenavn, v.pris, v.pris*p.antal
from posteringer p
join vare v
on v.id = p.vareID
Jeg kan næsten ikke kommentere dette, uden at skrive en grundbog i SQL. Det
er et join mellem to tabeller, stort set så simpelt som de forekommer. Det
hjælper dig muligvis, hvis jeg i stedet skriver den som:
select p.klasse, p.dato, p.antal, v.varenavn, v.pris, v.pris*p.antal
from posteringer p
, vare v
where v.id = p.vareID
Forskellen er rent syntaktisk.
Så kigger vi på summatation.
select klasse, sum(antal*pris)
from posteringer p2
join vare v2
on v2.ID = p2.vareID
group by klasse
Det bliver muligvis lidt lettere at gennemskue, hvis man først kigger på det
lidt simplere udtryk:
select sum(antal*pris)
from posteringer p2
join vare v2
on v2.ID = p2.vareID
Her findes den samlede pris for alt, hvad der er registreret i posteringer.
(vare er blandet ind i sagen, fordi det er her prisen står.)
--
Venlig hilsen /Best regards
Kristian Damm Jensen
| |
Ukendt (05-05-2008)
| Kommentar Fra : Ukendt |
Dato : 05-05-08 20:45 |
|
"Kristian Damm Jensen" <dNOamSPm.uAMsenet@kristiandamm.dk> skrev i en
meddelelse news:481f6390$0$15893$edfadb0f@dtext01.news.tele.dk...
> Michael Sørensen wrote:
>> "Kristian Damm Jensen" <dNOamSPm.uAMsenet@kristiandamm.dk> skrev i en
>> meddelelse news:481f1d2b$0$15895$edfadb0f@dtext01.news.tele.dk...
>>> Michael Sørensen wrote:
>>>> Jeg har 3 tabeller
>>>>
>>>> KLASSE
>>>> Klasse, pk
>>>> Budget
>>>>
>>>> VARE
>>>> ID, pk
>>>> Navn
>>>> Beskrivelse
>>>> Pris
>>>>
>>>> POSTERINGER
>>>> ID, pk
>>>> Dato
>>>> Klasse, fk
>>>> VareID, fk
>>>> Antal
>>>>
>>>> Kan jeg i en grid få vist følgende oplysninger (en liste over køb i
>>>> en enkelt klasse)
>>>>
>>>> - Klasse, dato, varenavn (ikke ID), antal, varens á pris, samlet
>>>> pris Samt det samlede forbrug for klassen ved at lægge den samlede pris
>>>> for samtlige linier for klassen sammen.
>>>
>>> Du beder om både at få detaljer og summering i samme søgning. Det
>>> kan i princippet ikke lade sig gøre. Men man kan kombinerer to
>>> søgninger til én og fx lave
>>
>> De to ovennævnte ting må gerne være adskilt for min skyld. de behøver
>> ikke blive vist sammen.
>
> Godt. Det bliver også en betydelig enklere sql.
>
>> Kan man i øvrigt hente VARENAVN i stedet for VAREID, når det er
>> VAREID, der er gemt i tabellen POSTERINGER, mens det tilhørende
>> VARENAVN er i tabellen VARER.
>
> Ja. prøv at læse på "join".
>
>>> select klasse, dato, varenavn, antal, pris, pris*antal,
>>> (select sum(antal*pris)
>>> from posteringer p2
>>> join klasse k2
>>> on p2.klasse = k2.klasse
>>> join vare v2
>>> on v2.ID = p2.vareID
>>> where k2.klasse = p.klasse
>>> )
>>> from posteringer p
>>> join vare v
>>> on v.id = p.vareID
>>
>> Kan jeg ikke få dig til at kommentere ovenstående, da jeg er faret
>> vild - allerede i 1. linie - selvom jeg har styr på simpel SQL.
>
> Vi splitter den lige i to, som du selv foreslog:
>
> Først den enkle del, der henter detaljeoplysninger fra posteringer.
>
> select p.klasse, p.dato, p.antal, v.varenavn, v.pris, v.pris*p.antal
> from posteringer p
> join vare v
> on v.id = p.vareID
>
> Jeg kan næsten ikke kommentere dette, uden at skrive en grundbog i SQL.
> Det er et join mellem to tabeller, stort set så simpelt som de forekommer.
> Det hjælper dig muligvis, hvis jeg i stedet skriver den som:
>
> select p.klasse, p.dato, p.antal, v.varenavn, v.pris, v.pris*p.antal
> from posteringer p
> , vare v
> where v.id = p.vareID
>
> Forskellen er rent syntaktisk.
>
>
>
>
> Så kigger vi på summatation.
>
> select klasse, sum(antal*pris)
> from posteringer p2
> join vare v2
> on v2.ID = p2.vareID
> group by klasse
>
> Det bliver muligvis lidt lettere at gennemskue, hvis man først kigger på
> det lidt simplere udtryk:
>
> select sum(antal*pris)
> from posteringer p2
> join vare v2
> on v2.ID = p2.vareID
>
> Her findes den samlede pris for alt, hvad der er registreret i
> posteringer. (vare er blandet ind i sagen, fordi det er her prisen står.)
Mange tak
| |
Ukendt (05-05-2008)
| Kommentar Fra : Ukendt |
Dato : 05-05-08 20:54 |
|
"Kristian Damm Jensen" <dNOamSPm.uAMsenet@kristiandamm.dk> skrev i en
meddelelse news:481f6390$0$15893$edfadb0f@dtext01.news.tele.dk...
> Michael Sørensen wrote:
>> "Kristian Damm Jensen" <dNOamSPm.uAMsenet@kristiandamm.dk> skrev i en
>> meddelelse news:481f1d2b$0$15895$edfadb0f@dtext01.news.tele.dk...
>>> Michael Sørensen wrote:
>>>> Jeg har 3 tabeller
>>>>
>>>> KLASSE
>>>> Klasse, pk
>>>> Budget
>>>>
>>>> VARE
>>>> ID, pk
>>>> Navn
>>>> Beskrivelse
>>>> Pris
>>>>
>>>> POSTERINGER
>>>> ID, pk
>>>> Dato
>>>> Klasse, fk
>>>> VareID, fk
>>>> Antal
>>>>
>>>> Kan jeg i en grid få vist følgende oplysninger (en liste over køb i
>>>> en enkelt klasse)
>>>>
>>>> - Klasse, dato, varenavn (ikke ID), antal, varens á pris, samlet
>>>> pris Samt det samlede forbrug for klassen ved at lægge den samlede pris
>>>> for samtlige linier for klassen sammen.
>>>
>>> Du beder om både at få detaljer og summering i samme søgning. Det
>>> kan i princippet ikke lade sig gøre. Men man kan kombinerer to
>>> søgninger til én og fx lave
>>
>> De to ovennævnte ting må gerne være adskilt for min skyld. de behøver
>> ikke blive vist sammen.
>
> Godt. Det bliver også en betydelig enklere sql.
>
>> Kan man i øvrigt hente VARENAVN i stedet for VAREID, når det er
>> VAREID, der er gemt i tabellen POSTERINGER, mens det tilhørende
>> VARENAVN er i tabellen VARER.
>
> Ja. prøv at læse på "join".
>
>>> select klasse, dato, varenavn, antal, pris, pris*antal,
>>> (select sum(antal*pris)
>>> from posteringer p2
>>> join klasse k2
>>> on p2.klasse = k2.klasse
>>> join vare v2
>>> on v2.ID = p2.vareID
>>> where k2.klasse = p.klasse
>>> )
>>> from posteringer p
>>> join vare v
>>> on v.id = p.vareID
>>
>> Kan jeg ikke få dig til at kommentere ovenstående, da jeg er faret
>> vild - allerede i 1. linie - selvom jeg har styr på simpel SQL.
>
> Vi splitter den lige i to, som du selv foreslog:
>
> Først den enkle del, der henter detaljeoplysninger fra posteringer.
>
> select p.klasse, p.dato, p.antal, v.varenavn, v.pris, v.pris*p.antal
> from posteringer p
> join vare v
> on v.id = p.vareID
>
> Jeg kan næsten ikke kommentere dette, uden at skrive en grundbog i SQL.
> Det er et join mellem to tabeller, stort set så simpelt som de forekommer.
> Det hjælper dig muligvis, hvis jeg i stedet skriver den som:
Problemet med denne del var primært, at jeg ikke forstod, hvordan v og p
opstod og hvad de betød, men jeg har nu gennemskuet, at
from posteringer p
og
join vare v
definerer p og v som forkortelser for de to tabeller?
> select p.klasse, p.dato, p.antal, v.varenavn, v.pris, v.pris*p.antal
> from posteringer p
> , vare v
> where v.id = p.vareID
>
> Forskellen er rent syntaktisk.
Og denne omskrivning hjalp mig også meget med forståelsen. Jeg kendte kun
sidstnævnte SQL syntaks.
> Så kigger vi på summatation.
>
> select klasse, sum(antal*pris)
> from posteringer p2
> join vare v2
> on v2.ID = p2.vareID
> group by klasse
>
> Det bliver muligvis lidt lettere at gennemskue, hvis man først kigger på
> det lidt simplere udtryk:
>
> select sum(antal*pris)
> from posteringer p2
> join vare v2
> on v2.ID = p2.vareID
>
> Her findes den samlede pris for alt, hvad der er registreret i
> posteringer. (vare er blandet ind i sagen, fordi det er her prisen står.)
Mit problem her var igen p2 og v2, men jeg går ud fra, at det igen er
definering af forkortelser for tabelnavne og så blot for at kalde dem noget
andet end ovenfor
Endnu engang tak - nu fik jeg forståelsen
| |
|
|