webForumDet fria alternativet

DISTINCT-fråga

12 svar · 834 visningar · startad av asp

aspMedlem sedan aug. 2002733 inlägg
#1

Hej..

Vill klämma in en kod så inte "Till" upprepas någon gång.

SELECT * FROM Bud

SELECT DISTINCT Till FROM Bud

Men när jag kör nedersta raden så kan jag ej använda mig av andra fält som summa och datum. Då får jag felmeddelandet:

Error Type:
ADODB.Recordset (0x800A0CC1)
Item cannot be found in the collection corresponding to the requested name or ordinal.
/transfer/bids.asp, line 15

Rad 15 innehåller.... makeSumma(rs("Summa"))

TroxyMedlem sedan mars 20041 505 inlägg
#2

Du borde läsa på hur SQL egentligen fungerar.
Om du bara skriver "SELECT DISTINCT Till" så hämtar den bara kolumnen "Till", och då kan du inte skriva ut några andra fält.

Vad är det för fler fält du vill hämta?
Vad innehåller summa?
Vad gör funktionen makeSumma()?

LarsGMedlem sedan dec. 200012 464 inlägg
#3

Flyttas från ASP

aspMedlem sedan aug. 2002733 inlägg
#4

Tycker det står ganska klart att jag vill också hämta fälten summa och datum. Summa innehåller ett tal och makeSumma gör talet till rätt valuta. Men det spelar ingen roll.

TroxyMedlem sedan mars 20041 505 inlägg
#5
SELECT DISTINCT Till, Summa, Datum FROM Bud
aspMedlem sedan aug. 2002733 inlägg
#6

Redan testat det, kommer fortfarande flera poster där "Till" har samma värde... nu läste jag visserligen problemet med en IF-sats istället, men hade ändå varit bra om man kunde få reda på hur SQL-satsen sett ut... :)

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Om det för ett värde på TILL finns flera olika värden av SUMMA och DATUM, vilken post av dessa vill du då hämta? Ange exempel på datainnehåll och förväntat resultat.

Du skall inte behöva använda någon if-sats i ASP för att få fram resultatet.

aspMedlem sedan aug. 2002733 inlägg
#8

Jag vill hämta poster där TILL ej upprepas. Om det finns poster med samma värde i TILL så skall den ta värdet där SUMMA är högst.

LarsGMedlem sedan dec. 200012 464 inlägg
#9
select till,datum,summa
   from bud as b
  where summa
   in (select max(summa)
          from bud
         where bud.till = b.till)
aspMedlem sedan aug. 2002733 inlägg
#10

Tack, koden fungerar. Kan någon förklara HUR koden fungerar.

CompusaMedlem sedan jan. 20023 327 inlägg
#11

Läs här: http://www.onlamp.com/pub/a/onlamp/2001/07/26/aboutSQL.html

Om du inte förstår ändå, så finns matnyttigt här: http://www.google.se/search?hl=sv&q=sql+subqueries&btnG=Sök&meta=

aspMedlem sedan aug. 2002733 inlägg
#12

Okej, tack har läst men har svårt att förstå exakt vad som händer.

Kanske kan förstå bättre om jag får ett svar på denna fråga...

Har en tabell med fält:
Av (Budarens ID)
Till (Spelarens ID)
Summa (Summa i SEK)

För att räkna ut hur mycket en budare har lagt totalt summerar jag Summa. Men nu vill helst att den inte skall summera två poster där Till är av samma värde, utan ta den som är högst.

SELECT TOP 10 Av, Sum(Summa) AS antal FROM Bud GROUP BY Av ORDER BY 2 DESC, Av ASC
emissionMedlem sedan dec. 19996 721 inlägg
#13
SELECT Av,SUM(DISTINCT(Summa)) FROM Bud b
WHERE summa
   in (select max(summa)
          from bud
         where bud.till = b.till and bud.av=b.av)
GROUP BY Av

eller

SELECT Av,SUM(MaxSumma) FROM
(
   SELECT Av,Till,MAX(Summa) as MaxSumma FROM Bud GROUP BY Av,Till
) m
GROUP BY Av
ORDER BY SUM(MaxSumma) DESC,Av
122 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
119 ms — hämta tråd, inlägg och bilagor (db)