Avatar billede dfens Nybegynder
18. maj 2001 - 15:46 Der er 12 kommentarer og
1 løsning

SQL Query med Sum

Kan man lave flg. direkte i Query\'en eller skal jeg tage noget kode i brug:

eks. jeg har en tabel som består af 2 felter, ID og TAL.

eks. på da

ID  TAL
1  20
2  20
3  45
4  50
5  10

Nu vil jeg gerne retuneret et recordset, med posterne hvor summen overstiger eks. 50.

eks. angiver 50, så skal jeg have post 1+2+3
eks. angiver 30, så skal jeg have post 1+2
eks. angiver 5, så skal jeg have post 1
eks. angiver 100, så skal jeg have post 1+2+3+4

Håber at det blev nogenlunde forståeligt.
Skal kører i en SP på MS SQL 7
Avatar billede martinlind Nybegynder
18. maj 2001 - 15:53 #1
Jeg tvivler
Avatar billede mwittrock Nybegynder
18. maj 2001 - 16:29 #2
Prøv den her (formateringen er kun OK i fixed-width font):

CREATE PROCEDURE ProcNavn (@sum INTEGER) AS
  SELECT *
  FROM  TabelNavn
  WHERE  ID <= (SELECT MIN(ID)
                FROM  TabelNavn AS t
                WHERE  (SELECT SUM(Tal) FROM TabelNavn WHERE ID <= t.ID ) > @sum)

EXEC ProcNavn 50

giver:

ID          Tal       
----------- -----------
1          20
2          20
3          45

EXEC ProcNavn 100

giver:

ID          Tal       
----------- -----------
1          20
2          20
3          45
4          50
Avatar billede dfens Nybegynder
18. maj 2001 - 17:04 #3
mwittrock: Ja, jeg må jo sige at det virker, men der er lige en lille ting, hvis man søger på eks. 20 får man 1+2, hvor man kun skulle have 1.
Og nu har jeg kigget intensivt på query i 30min. og jeg kan eddermanme ikke gennemskue den. kan du give lidt hjælpe. Den skal nemlig sortere på en ældste dato istedet for en ID.
Avatar billede mwittrock Nybegynder
18. maj 2001 - 17:07 #4
Lav

> @sum

om til

>= @sum
Avatar billede dfens Nybegynder
21. maj 2001 - 11:56 #5
Er der nogen mulighed for at den kan benytte en dato istedet for ID, til at tælle sammen med?
Avatar billede mwittrock Nybegynder
21. maj 2001 - 12:01 #6
Det burde ikke umiddelbart ændre på proceduren, at du i stedet for kolonnerne \"ID\" og \"Tal\" har kolonnerne \"Dato\" og \"Tal\" (udover at \"ID\" skal erstattes med \"Dato\" i SQLen ;-)
Avatar billede dfens Nybegynder
21. maj 2001 - 13:32 #7
selvfølig :-), hvis jeg skal sætte nogle yderligere kriterier ind (check på andre felter), hvor skal disse placeres? (har prøvet ved begge where)
Avatar billede mwittrock Nybegynder
21. maj 2001 - 14:05 #8
Uden at kende dine kriterier, vil mit bud være, at du skal indsætte dem i begge WHERE kriterier.
Avatar billede dfens Nybegynder
21. maj 2001 - 21:28 #9
mwittrock: kriterierne virkede ved at blive sat på alle 3 wheres.
Jeg har fundet ud af hvad det er der driller, men ikke løsningen. Drilleriet er pga. at jeg skifter ID ud med en dato der ikke er unik. Så bliver alle poster fra den første dato vist. Såvidt jeg kan se er det fordi at ID bliver brugt til at tælle op med i SQL-sætningen. Har du nogle gode ideer?
Avatar billede mwittrock Nybegynder
22. maj 2001 - 02:34 #10
Hvad er tabellens primære nøgle? Vis mig lige hele tabellen, og beskriv med ord hvad du skal bruge forespørgslen til.
Avatar billede dfens Nybegynder
22. maj 2001 - 21:10 #11
ID                Primær-Nøgle      Auto-nummer
TYPE              Købe/Salg        Tekstfelt
VarerID          Nummer på vare i en anden tabel.
Antal            Antal som ønskes købt/solgt
Pris              Pris på varen
Fra_dato          Varen skal være tilsalg/køb fra denne dato
Til_dato          Varen skal ikke være tilsalg/køb efter denne dato

Jeg har behov for at få alle vare som har typen til salg, og dags dato er between fra_dato og til_dato, som har den valgte Varer_ID. Men hvis der er en person der vil sælge 10 stk. og en anden 20 stk. og en tredjer der vil købe 25 eller 30 stk. skal jeg have begge poster retuneret.

Håber at det hjalp på forståelsen.
Avatar billede mwittrock Nybegynder
28. maj 2001 - 16:13 #12
Er rækkefølgen væsentlig? Ellers burde du stadig kunne sortere på ID (som du ved er unik, modsat datoen) og blot indføre begrænsningen på datoer.
Avatar billede dfens Nybegynder
28. maj 2001 - 18:18 #13
rækkenfølgen er væsentlig. de ældste skal først, der efter sorteres på antal.
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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