Det ska inte vara
u.poang) In (select top 5 ur.poang
utan
u.utstnr) In (select top 5 ur.utstnr
Förutsatt att det är "utstnr" som identifierar den specifika utställningen
17 svar · 748 visningar · startad av MizzK
För några dagar sedan fick jag hjälp med en top 5 sats som skulle räkna ut top 5 och den fungerade trodde jag, men nu ser jag att den räknar ut top 5 på vissa ställen och top 6 på vissa, någon som har förslag hur detta ska fixas för att de ska bli korrekt?
Sql satsen:
SELECT u.hundnr, h.hundnamn, h.kon, Sum(u.poang) AS top5, (select sum(utr.poang)
from utst_resultat utr where utr.hundnr = u.hundnr) AS total, (select Count(aus.utstnr)
from utst_resultat aus where aus.hundnr = u.hundnr) AS antal
FROM utst_resultat AS u INNER JOIN hund AS h ON u.hundnr = h.hundnr
WHERE (((u.poang) In (select top 5 ur.poang
from utst_resultat ur where(ur.hundnr = u.hundnr)
order by ur.poang desc))) GROUP BY u.hundnr, h.hundnamn, h.kon
HAVING(((h.kon) = 't')) ORDER BY Sum(u.poang) DESC;
gamla tråden:
Det ska inte vara
u.poang) In (select top 5 ur.poang
utan
u.utstnr) In (select top 5 ur.utstnr
Förutsatt att det är "utstnr" som identifierar den specifika utställningen
De gav samma resultat.. ingen skillnad i listan
om de var såhär du menade
SELECT u.hundnr, h.hundnamn, h.kon, Sum(u.poang) AS top5, (select sum(utr.poang)
from utst_resultat utr where utr.hundnr = u.hundnr) AS total, (select Count(aus.utstnr)
from utst_resultat aus where aus.hundnr = u.hundnr) AS antal
FROM utst_resultat AS u INNER JOIN hund AS h ON u.hundnr = h.hundnr
WHERE (((u.utstnr) In (select top 5 ur.utstnr
from utst_resultat ur where(ur.hundnr = u.hundnr)
order by ur.poang desc))) GROUP BY u.hundnr, h.hundnamn, h.kon
HAVING(((h.kon) = 'h')) ORDER BY Sum(u.poang) DESC;
kan de ha ngt med att vissa resultat kan vara identiska och i de fallen ska den endast välja en av dem? Eller så många av dem som behövs.. dvs den ska alltid välja de 5 högsta värdena!
Det var just det som min förändring skulle åstadkomma. I den ursprungliga SQL-satsen räknades t.ex. 10,10,10,6,5,3,2 som de fem högsta.
Renskriven
SELECT u.hundnr,
h.hundnamn,
h.kon,
Sum(u.poang) AS top5, (SELECT sum(utr.poang) FROM utst_resultat utr WHERE utr.hundnr = u.hundnr) AS total, (SELECT Count(aus.utstnr) FROM utst_resultat aus WHERE aus.hundnr = u.hundnr) AS antal
FROM utst_resultat AS u
INNER JOIN hund AS h
ON u.hundnr = h.hundnr
WHERE u.utstnr In
(SELECT top 5 ur.utstnr
FROM utst_resultat ur
WHERE ur.hundnr = u.hundnr
ORDER BY ur.poang desc
)
AND h.kon='t'
GROUP BY u.hundnr,
h.hundnamn,
h.kon
ORDER BY Sum(u.poang) DESC
får med din kod samma resultat som innan, ingen skillnad =(
både utställning 3 och 6 ex kan mna få samma poäng på..
när jag bara väljer top 5 satsen skriver den ut ex så här
här finns totalt bara 6 resultat
utstnr-poang
31-30p
3-26p
11-20p
9-20p
1-15p
8-15p
ett annat exempel med 10 resultat
8-52
17-43
18-20
11-20
31-15
30-15
27-15
jepp verkar så, men i första fallet här fanns de totalt 6 resultat men skrev ut 6 samt i den andra fallet fanns total 10 resultat och skrev ut 7..
konstigt va
acess databas!
Det råkar inte vara så att du använder någon tokig datatyp, såsom Memo?
nope alla e numbers...
kan de ha ngt med att vissa resultat kan vara identiska och i de fallen ska den endast välja en av dem? Eller så många av dem som behövs.. dvs den ska alltid välja de 5 högsta värdena!
Brukar lösas genom att (i den delfråga som innehåller TOP) lägga till ett sekundärt sorteringsfält, som alltid är unikt (exempelvis ett räknar-id.).
hur menar du? visa gärna me kod
.....
SELECT top 5 ur.utstnr
FROM utst_resultat ur
WHERE ur.hundnr = u.hundnr
ORDER BY ur.poang desc[b], något_till_fält_från_utst_resultat_att_sortera_på_exempelvis_en_räknare[/b]
.....
Det var som sjutton. Sickna fasoner av Access....
Ja, Access beter sig lite underligt ibland (TOP är en av dessa underligheter), och det är bara att lära sig.
(Jag noterar också att jag för en gångs skull kan något som inte emission kan! )
@nders skrev:
(Jag noterar också att jag för en gångs skull kan något som inte emission kan!
)
Inte konstigt att jag sov dåligt....