Just nu i M3-nätverket
Gå till innehåll

uträkning


eddie66

Rekommendera Poster

hej

 

jag undrar om någon kan hjälpa mig att klura ut denna uppgift. jag har funderat from o tillbaka men får inte ihop det.

 

jag vill att koden ska ta fram den högsta siffran från försäljnings kolumnen och jämföra den med dagens försäljning. om dagens försäljning är högre så ska det visa en bild, i annat fall så ska den inte göra något.

 

kolumnen som innehåller alla dagens försäljning ligger under TBLFORSALJNING.DAGENSTOTAL

 

nedan kod använder jag på sidan och funkar fint, jag loopar igenom alla kontor samt dom olika försälningssiffrorna. för varje kontor så skrivs det en ny rad.

 

det jag vill är att se vilket kontor som har slagit nytt försäljningsrekord och visa det med en bild bredvid det kontoret.

 

hoppas ni förstår vad jag menar.

 

tack på förhand.

 

SQL = "SELECT * From tblforsaljning, tblkontor WHERE ForsaljningsDatum = #"& CDate(dYesterday) & "#" & "and tblforsaljning.KontorIDRef = tblkontor.KontorID"

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

 

Var finns "rekordet" eller är det dagens högsta som ska hittas o markeras med en bild?

Spelar sorteringen någon roll?

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

det finns i TBLFORSALJNING.DAGENSTOTAL ,

 

den ska alltså jämföra dagens försaljning med alla andra och om dagens är högre så ska en bild visas på ett specifikt ställe.

 

ovan sql sats funkar som den ska och där ligger dagenstotal också. jag vet bara inte hur hela sql satsen skulle se ut :-)

 

 

 

Länk till kommentar
Dela på andra webbplatser

ok, går det bra att sortera listan så den som sålt bäst ligger överst?

 

om inte så kör denna sql först för att hitta den som sålt bäst.

 

SQL = "SELECT MAX(tblforsaljning.dagenstotal) as no1, KontorsID From tblforsaljning, tblkontor WHERE ForsaljningsDatum = #"& CDate(dYesterday) & "#" & "and tblforsaljning.KontorIDRef = tblkontor.KontorID "

 

no1 = KontorsID resultatet av SQL-satsen ovan

 

sen kör du din befintliga sql och kollar för varje rad om no1 = KontorsID i din befintliga SQL

 

Hoppas jag fattade dig rätt nu...

 

 

;)

 

Länk till kommentar
Dela på andra webbplatser

he he du tänker rätt men jag förstår inte hur du menar.

 

varför kommer kontorID in i bilden?

 

jag vill att sql satsen ska kolla om dagens försäljning(från alla kontor och som ligger under dagenstotal) är den högsta, och i så fall visa en bild på ett specifikt ställe.

 

eller är det jag som inte förstår hur du menar?

 

eller är det så att no1 innehåller den högsta försäljningen, och sen kör jag bara ex

if no1 > recset("dagenstotal") then

visa bild

else

skapa en tom rad

end if

 

 

 

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

du har helt rätt för dig!

 

no1 innehåller dagens högsta försäljning och du kollar den precis som du skriver under loopningen.

 

Lycka till

 

Länk till kommentar
Dela på andra webbplatser

ok testade o lägga in det men fick nedan fel.

 

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

 

/page/valkommen.asp, line 14

 

line 14 är själva sql satsen. något fattas här.

 

jag har lagt in i loppen nedan kod som jag tror borde funka när resten väl fungerar. eller vad tror du?

 

			<td>
  <%  if no1 > recset("dagenstotal") then %>
                     <td>
  <img src="../images/pageico/objects_078.gif" alt="Nytt Dag Rekord" width="16" height="16">
		  </td>
		  <%else%>
		  <td>&nbsp;</td>
		  <%end if%>

 

Länk till kommentar
Dela på andra webbplatser

ok, det är för att jagglömde att lägga med en del fält som du har villkor på... bytut KontorsID mot * i "min" SQL-sats så bör det funka sen.

 

Länk till kommentar
Dela på andra webbplatser

får fortfarande fel.

 

Microsoft][ODBC Microsoft Access Driver] Cannot group on fields selected with '*'.

 

koden ser ut så här nu.

SQL = "SELECT MAX(tblforsaljning.dagenstotal) as no1, * From tblforsaljning, tblkontor WHERE ForsaljningsDatum = #"& CDate(dYesterday) & "#" & "and tblforsaljning.KontorIDRef = tblkontor.KontorID"

 

ska jag ändra något?

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Trodde det skulle gå att "fuska" lite...

 

 

SQL = "SELECT MAX(tblforsaljning.dagenstotal) as no1, ForsaljningsDatum, tblforsaljning.kontorIDRef, tblkontor.kontorID From tblforsaljning, tblkontor WHERE ForsaljningsDatum = #"& CDate(dYesterday) & "#" & "and tblforsaljning.KontorIDRef = tblkontor.KontorID"

 

Det bör funka så, annars försöker jag igen

 

 

;)

 

Länk till kommentar
Dela på andra webbplatser

he he

 

fick detta fel nu

 

[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'forsaljningsdatum' as part of an aggregate function. 

 

Länk till kommentar
Dela på andra webbplatser

Jo, det är klart det blir fel när ni försöker skriva querys med aggregatfunktioner utan att göra en gruppering.

Jag orkar inte sätta mig in i grundproblemet, men kan iallafall ge den grundläggande förklaringen att om du blandar aggregerande funktioner med vanliga fält i urvalet så måste du använda dig av en GROUP BY där du väljer ut vilka fält du skall gruppera på. Ex.:

SELECT Department, MAX(Age) FROM Employees GROUP BY Department

 

Länk till kommentar
Dela på andra webbplatser

hihi, verkar som dagens sanning...

 

vi har nog krånglat till det onödigt mkt...

 

Tabellen som innehåller dagens högsta värde innehåller väl även kotorsID så vi behöver ju inte blanda in båda tabellerna där...

 

 

SQL = "SELECT MAX(dagenstotal) as no1, ForsaljningsDatum From tblforsaljning WHERE ForsaljningsDatum = #"& CDate(dYesterday) & "# GROUP BY ForsaljningsDatum

 

funkar det bättre?

 

Du kanske ska plocka ut kontorsID redan här i en variabel för enklare koll i den andra loopen sen.

no1 innehåller ju bara högsta summan...

 

kom på att vi kan inte gruppera på datum...så byt ut det mot kontorsIDRef istället.

 

 

[inlägget ändrat 2008-01-24 11:13:50 av no10]

Länk till kommentar
Dela på andra webbplatser

ok testade men fick samma igen. jag ändrade även till kontorsidref istället för datum.

 

Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'ForsaljningsDatum' as part of an aggregate function.

 

anledningen till att jag hämtar från tblkontor är för att jag vill få ut namnet på kontoret också. annars får jag enbart ut kontorsidref.

 

hur ska jag annars hämta namnet utan att skapa en ny slq sats?

 

 

Länk till kommentar
Dela på andra webbplatser

ok, vi behöver kanske lägga till dagenstotal som gruppering efter ForsaljningDatum...

 

svårt när man inte ha databasen framför sig...och har lite bråttom ;)

 

dvs avsluta SQL med ForsaljningsDatum, dagenstotal

 

namnet får du ut i den andra sql-satsen du har så det är inga problem, nu vill vi bara hitta vilket kontor som har högsta försäljningen

 

Länk till kommentar
Dela på andra webbplatser

Glöm inte att om datumet är av typen datetime så kan du inte gruppera efter det (eller tja, du kan gruppera på det men det kommer inte grupperas per dag utan per exakt klockslag vilket inte ger önskat resultat)

 

För att förtydliga grupperingssyntaxen så måste du ange samma fält i GROUP BY som du har valt ut i din SELECT

 

Länk till kommentar
Dela på andra webbplatser

rätt o riktigt Anjuna Moon...

 

Som vanligt blir man straffad för att man försöker sig på snabba lösningar utan att tänka efter =)

 

Länk till kommentar
Dela på andra webbplatser

ok, ni har säkert rätt i det ni säger men jag förstod inget av det.

 

det enda jag vill är att sql satsen ska kolla en viss kolumn i min acess DB och ta det högsta värdet där och jämföra det med dagens försäljning.

 

om dagens försäljning är den högsta så är nytt rekord slagits, jag ska då visa en bild på min asp sida.

 

jag använder mig av 2 tabeller, tblkontor där alla kontor finns samt tblforsaljning och här finns det en referens till tblkontor.

 

den här koden funkar perfekt och hämtar ut namn på kontoren samt dagens försäljning för alla kontor som har sålt .

SQL = "SELECT * From tblforsaljning, tblkontor WHERE ForsaljningsDatum = #"& CDate(dYesterday) & "#" & "and tblforsaljning.KontorIDRef = tblkontor.KontorID"

 

det som fattas är som sagt att sql satsen ska även hämta ut den försäljning(dagenstotal) som är högst, och är dagens försäljning är högre så ska en bild visas. på så sett så sått så kan jag se om man slagit ett nytt rekord varje dag.

 

detta är koden där jag ska visa bilden om dagens försäljning är den högsta.

 

<%'om högsta siffran är mindre än recset("dagenstotal")
if högsta siffran i DB < recset("dagenstotal") then
 %>
   <td>
 <img src="../images/pageico/objects_078.gif" alt="Nytt Dag Rekord" width="16" height="16">
 </td>
 <%else%>
 <td> </td>
 <%end if%>

 

 

hur får jag ihop detta :)?

[inlägget ändrat 2008-01-24 14:30:37 av eddie66]

Länk till kommentar
Dela på andra webbplatser

vi gör det enklast möjliga...

 

SQL = "SELECT dagenstotal From tblforsaljning WHERE ForsaljningsDatum = #"& CDate(dYesterday) & "# Order by dagenstotal desc (eller asc här lär mig aldrig vilken som är vilken...)

ingen loop här utan vi tar det första värdet bara, ska man kolla efter det högsta värdet oavsett datum tar du bort det bara.

no1 = "dagenstotal"

 

sen kör du din koll som innan.

 

 

Länk till kommentar
Dela på andra webbplatser

Orkar inte heller sätta mig in i "problemet" men kan ju visa snabbt skillnaden på DSC och ASC.

 

ASC = stigande ordning, lägst -> högst eller a -> ö

DESC = fallande ordning, högst -> lägst eller ö - a

 

Länk till kommentar
Dela på andra webbplatser

ok men hur får jag ut namnet på kontoren som ska skrivas ut på sidan?

 

testade din kod o ändrade så att sql hämtade all data då jag skriver ut fler kolumner från db.

 

dock så visar sidan "bilden" som jag vill ska synas på alla kontor och inte enbart på det kontoret som har sålt mest och slagit rekord, och det kan ju enbart vara ett kontor.

 

förslag.?

 

Länk till kommentar
Dela på andra webbplatser

den kosen du fick av mig sist ska du inte loopa dig igenom utan bara ta värdet från dagenstotal till en variabel.

 

Sen kör du din sql-sats och loopar igenom den och gör kollen mot det värdet vi hämtade till en variabel i min SQL

 

 

 

Länk till kommentar
Dela på andra webbplatser

sorry men jag hänger inte med :-(

 

menar du att jag ska skriva 2st sql satser på sidan?

 

hur skulle detta se ut i kod? så avancerad är jag inte tyvärr

 

Länk till kommentar
Dela på andra webbplatser

Precis så jag menar.

 

Först kör du den som plockar ut rekordet och "sparar" det i en variabel t.ex

 

rekord = rs("dagenstotal") ' Frpn första sql-satsen

 

sen kör du din fungerande sql-sats och har nu rekordet att kolla mot i din loop.

 

Länk till kommentar
Dela på andra webbplatser

ok, skulle jag kunna besvära dig med koden då jag inte vet hur jag ska få ihop det när det blir så här avancerat :)

 

tack på förhand

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...