webForumDet fria alternativet

större än

20 svar · 412 visningar · startad av pellsäter

pellsäterMedlem sedan aug. 2000526 inlägg
#1

klurigt värre!!

Har en tabell "kunder" med fälten namn, adress, epost

Har en tabell "orderRadold med fälten orderID,prodID, epost, antal, datum

Har en tabell "produkter" med fälten prodID,pris,bild,beskrivning

Nu vill jag ha fram alla kunder som handlat för mer än 2.000:-

hur skriver jag den SQL satsen

Webforum är så otroligt bra när man vill lära sig nåt......

skymanMedlem sedan juli 20012 450 inlägg
#2

select ku.Namn from produkter.pr
inner join orderRadold ra on pr.prodID=ra.prodID
inner join kunder ku on ra.epost=ku.epost
where pr.pris > 2000
Kanske.... :)

pellsäterMedlem sedan aug. 2000526 inlägg
#3

nja för pris anger bara vad produkten kostar per st... och jag behöver veta vad kunden har köpt för allt sammans

Alltså behöver jag koppla ihop så att jag ser vilka ordrar som kunden lagt.. vilka produkter han köpt och hur många av varje produkt och slå ihop det till en summa som jag sedan ska kolla om den överstiger 2000 kr

hogdefooMedlem sedan jan. 200222 inlägg
#4

Hej,

Är den enda koppling person - order epost ??

Sen undrar jag om det inte är bättre att ha priset på produkten i orderradstabellen ochså..
Tänk dig följande senario:
Jag köper produkter av dig för 1670:-
Efter två månader höjs priset på dessa produkter till 2234:-

Om du inte har priset i orderraden utan en koppling till prodID så kommer ju jag hamna i den grupp som har handlat för mer än 2000:- fast jag inte har det....

Bara en fundering

skymanMedlem sedan juli 20012 450 inlägg
#5

select pr.pris, ku.namn, pr.prodID from produkter.pr
inner join orderRadold ra on pr.prodID=ra.prodID
inner join kunder ku on ra.epost=ku.epost
group by ku.namn
Sen så sköter du resten med asp :)

pellsäterMedlem sedan aug. 2000526 inlägg
#6

det skapas ett orderID också men det är ju inte personkopplat........

epost finns med i både "kunder" och "orderRadold"

Det med priset är inte dumt tänkt alls.....

Hur skulle selectsatsen se ut med det??

LaspMedlem sedan juli 200012 980 inlägg
#7

Du bör absolut ha en orderpost med kundid.
Du skall sedan ta med priset till oderraden.
Är det sedan det sammalgda värdet du vill åt?

pellsäterMedlem sedan aug. 2000526 inlägg
#8

det skapas ett kundID när man köper något första gången....

Jap det sammanlagda värdet för en kunds alla ordrar....

Ok om jag då lägger in en kolumn i orderRadold som heter summa som innehåller varje beställd varas pris... alltså om personen beställt 4 st av något så är det den sammanlagda summan som står där...

hur tar jag då fram alla kunder som beställt mer för mer än 2000

pellsäterMedlem sedan aug. 2000526 inlägg
#9

jag hoppas att någon kommer med nåt br svar

agneta_rungMedlem sedan juli 2002145 inlägg
#10

Hej!

select k.namn, sum(o.antal * p.pris) summa
from kunder k, orderradoid o, produkter p
where k.epost = o.epost
and o.prodID = p.prodID
and summa > 2000
group by namn

Denna fråga utgår från de tabelldefinitioner du skrev i första inlägget.

När jag testkör den mot en Interbase-db funkar inte villkoret på kolumnalias (dvs "and summa > 2000"), men jag har bestämt för mig att jag skrivit liknande i exv SQLServer... Annars kanske du kan ta bort detta villkor och behandla resultatet i kod?

LarsGMedlem sedan dec. 200012 464 inlägg
#11
select k.namn, sum(o.antal * p.pris) summa 
from kunder k, orderradoid o, produkter p 
where k.epost = o.epost 
and o.prodID = p.prodID 
group by namn 
having sum(o.antal * p.pris) > 2000
agneta_rungMedlem sedan juli 2002145 inlägg
#12

Hmm, så var det ja!! :D

pellsäterMedlem sedan aug. 2000526 inlägg
#13

får det inte att funka...

det är säkert nåt fel men fnuttar

sql = "select k.fnamn, k.enamn, sum(o.antal * p.pris) summa from kunder k, orderRadold o, produkter p where k.epost = o.epost and o.artikelID = p.prodID group by k.enamn having sum(o.antal * p.pris) > 2000"

LarsGMedlem sedan dec. 200012 464 inlägg
#14

Vad får du för fel?

Hur ser sql-frågan ut om du skriver ut den skärmen?

sql = ...
response.write "SQL>" & sql & "<br>"
response.end
pellsäterMedlem sedan aug. 2000526 inlägg
#15

SQL>select k.fnamn, k.enamn, sum(o.antal * p.pris) summa from kunder k, orderRadold o, produkter p where k.epost = o.epost and o.artikelID = p.prodID group by k.enamn having sum(o.antal * p.pris) > 2000

så ser den ut

och felet ser ut så här

ADODB.Recordset.1 error '80004005'

SQLState: 37000
Native Error Code: -3100
[INTERSOLV][ODBC SequeLink driver][ACCESS][Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'sum(o.antal * p.pris) summa'.

agneta_rungMedlem sedan juli 2002145 inlägg
#16

Hej!

Du måste ha med alla selekterade kolumner i "group by"-klausulen. Det ska alltså vara så här:

select k.fnamn, k.enamn, sum(o.antal * p.pris) summa
from kunder k, orderRadold o, produkter p
where k.epost = o.epost and o.artikelID = p.prodID
group by k.fnamn, k.enamn
having sum(o.antal * p.pris) > 2000

Jag håller tummarna! :h

LarsGMedlem sedan dec. 200012 464 inlägg
#17

Om du testar att lägga till AS då?

sql = "select k.fnamn, k.enamn, sum(o.antal * p.pris) AS summa from kunder k, orderRadold o, produkter p 
where k.epost = o.epost and o.artikelID = p.prodID group by k.fnamn,k.enamn having sum(o.antal * p.pris) > 2000"

Det skall egentligen inte behövas enligt standard, men tyvärr så har alla DBMS sina egenheter och standardavvikelser.

Red: lade till k.fnamn i group by också.

agneta_rungMedlem sedan juli 2002145 inlägg
#18

...eller ta bort det!? Det används ju inte till något...

pellsäterMedlem sedan aug. 2000526 inlägg
#19

inte riktigt bra än..

jag fick detta felet nu

ADODB.Recordset.1 error '80004005'

SQLState: 07001
Native Error Code: -3010
[INTERSOLV][ODBC SequeLink driver][ACCESS][Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

sql ser ut så här nu

select k.fnamn, k.enamn, sum(o.antal * p.pris) AS summa from kunder k, orderRadold o, produkter p where k.epost = o.epost and o.artikelID = p.prodID group by k.fnamn,k.enamn having sum(o.antal * p.pris) > 2000

LarsGMedlem sedan dec. 200012 464 inlägg
#20

Då är det något kolumnnamn som inte stämmer med din tabelldefinition.

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)