>> "Hvad, mere præcis, er du ønsker output skal være?" <<
Jeg ønsker bare en smallinteger værdi, som i nedenstående er værdien 16, som
indikerer at der er 16 stk printkort af typen #1, som er placeret i 3
forskellige udstyrstyper.
Selve udregningen kommer til at ligge i en user-defined-funktion, som bliver
udført vha. autocomputed column i den tabel der indeholder oversigten over
alle unikke printkort.
Jeg skal prøve at forklare problemet.
En given type printkort, kan sidde i forskellige type udstyr. Selvom det er
samme slags kort, har firmaet registreret kortet med forskellige navne
(numre) alt afhængig hvor det sidder.
Enhedsid er selve korttypen. Næste kolonne i tabellen er i hvilket
udstyrstype kortene sidder i.
Der vil blive hentet data fra disse registreringssystemer en gang om
måneden, og jeg har behov for at gemme alle disse data, således at vi kan
beregne bla. fejlstaatistik på kortene.
Jeg har derfor behov for at finde det gennemsnitlige antal kort af en given
slags der sidder i en bestemt type udstyr, hvorefter jeg har brug for en sum
af alle kort af samme slags.
Kan mit problem evt. løses ved at lave en temporær tabel og putte
nedenstående udtræk over i, og derefter bare tage en SUM på den sidste
kolonne fra denne memory-baserede temporære tabel?
Eller har du en bedre ide ?
MVH
Steen
"Kristian Damm Jensen" <damm@ofir.dk> skrev i en meddelelse
news:2c9e2992.0408042244.d3aa94e@posting.google.com...
> "Steen Andreassen" <sandr@k.dk> wrote in message
news:<4111540b$0$279$edfadb0f@dread16.news.tele.dk>...
> > Hejsa....
> >
> > Så er den gal igen.
> >
> > Jeg har denne tabel:
> > CREATE TABLE [dbo].[tbl_enheder_idrift] (
> > [enhedsID] [smallint] NOT NULL ,
> > [AutoInsByNeType] [smallint] NULL ,
> > [dato] [datetime] NOT NULL ,
> > [antal] [smallint] NOT NULL
> > )
> >
> > Med eks. disse data:
> > 1,1,12-5-2004,4
> > 1,1,13-5-2004,2
> > 2,17,12-5-2004,1
> > 2,17,13-5-2004,3
> > 1,17,25-5-2004,5
> > 1,2,28-6-2004,8
> > 15,7,22-5-2004,100
> >
> > Når denne SQL-sætning køres:
> > SET @enhedsid = 1 /* Skal erstattes med overført var. i en funktion */
> > SET @aarstal = 2004 /* Skal erstattes med overført var. i en funktion */
> >
> > SELECT enhedsid, AutoinsByNeType, AVG(antal) AS AvgAntal
> > FROM tbl_enheder_idrift
> > WHERE AutoInsByNeType IS NOT NULL
> > AND datepart(YEAR, dato) = @aarstal
> > AND enhedsid = @enhedsid
> > GROUP BY enhedsid, AutoinsByNeType
> >
> > Fås dette output, som er gennemsnittet på grupperne, hvilket er helt ok:
> > 1,1,3
> > 1,2,8
> > 1,17,5
> >
> > Men jeg har behov for en sum af den sidste kolonne, som i ovenstående
giver
> > 16.
> >
> > Hvordan får jeg flettet det ind i min SQL-sætning ?
>
> Det gør du ikke.
>
> Hvad, mere præcis, er du ønsker output skal være?
> 1,1,3,16
> 1,2,8,16
> 1,17,5,16
> ??
>
> Men så har du jo reelt beregnet summen tre gange!
>
>
> Du kan muligivis skrive (jeg garanterer hverken for at nedenstående
> overholder ANSI eller kan køre på noget kendt DBMS)
>
> SELECT enhedsid
> , AutoinsByNeType
> , AVG(antal) AS AvgAntal
> , select sum((SELECT enhedsId, AVG(antal) AS AvgAntal
> FROM tbl_enheder_idrift
> WHERE AutoInsByNeType IS NOT NULL
> AND datepart(YEAR, dato) = @aarstal
> AND enhedsid = @enhedsid
> GROUP BY enhedsid, AutoinsByNeType)) as AvgSum
> FROM tbl_enheder_idrift ei
> WHERE AutoInsByNeType IS NOT NULL
> AND datepart(YEAR, dato) = @aarstal
> AND enhedsid = @enhedsid
> GROUP BY enhedsid, AutoinsByNeType
>
> Men det kamouflerer jo bare det faktum, at du er nødt til at beregne
> summen af gennemsnittene i en særskilt select.
>
> VH
> Kristian