webForumDet fria alternativet

större än

Databaser & SQLur Databashanterare & SQL

20 svar · 412 visningar · startad av pellsäter

Medlem sedan aug. 2000526 inlägg
Frågan#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......

Medlem 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.... :)

Medlem 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

Medlem 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

Medlem 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 :)

Medlem 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??

Medlem sedan juli 200012 978 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?

Medlem 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

Medlem sedan aug. 2000526 inlägg
#9

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

Medlem 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?

Medlem 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
Medlem sedan juli 2002145 inlägg
#12

Hmm, så var det ja!! :D

Medlem 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"

Medlem 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
Medlem 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'.

Medlem 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

Medlem 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å.

Medlem sedan juli 2002145 inlägg
#18

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

Medlem 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

Medlem sedan dec. 200012 464 inlägg
#20

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

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