Wypowiedzi
-
Wykombinowałem coś takiego w excelu dla innej tabeli:
Najpierw sortowanie po grupa - jest wartością liczbową, później ilosc malejąco
dodałem kolejną kolumnę (N) z:
=JEŻELI(C2-C3=0;1;0) (i w dół) - w kolumnie C jest grupa zwraca 1 do czasu kiedy się nie zmieni wtedy 0
w kolejnej kolumnie (O)
=(O1+N2)*N2 (i w dół)
dodaje do wartości poprzedniego wiersza 1 aż do momentu kiedy grupa się zmieni wtedy mnoży przez 0 i liczy od nowa filtr wybieram 1,2,3,4,5 i mam TOP5 ilości w każdej grupie.
Działa i to całkiem nieźle nawet na ponad 20tys wierszy, alei tak potrzebuję to zrobić w accesie.
Rozwiązanie:
SELECT smd.grupa, smd.ilosc, smd.nazwa, "TOP " & DCount("*","smd","[ilosc] >" & Replace([ilosc],",",".") & " and grupa = " & [grupa])+1 AS top_ilosc
FROM smd
WHERE (((DCount("*","smd","[ilosc] >" & Replace([ilosc],",",".") & " and grupa = " & [grupa]))<=4))
ORDER BY smd.grupa, "TOP " & DCount("*","smd","[ilosc] >" & Replace([ilosc],",",".") & " and grupa = " & [grupa])+1;
dobrze działa przy małej ilości - usunąłem kilkanaście tys wierszy przy około 600 daje jeszcze wynik w normalnym czasie
przy 7tys wierszy już trwa to długo ale daje wynik około 5min
przy 9tys po 8min a baza ma około 60tys wierszy (po całej nocy nic..) -
Wojciech M.:
Jaki typ ma u Ciebie grupa?
U mnie w testach grupa to była zmienna znakowa.
Jeżeli u Ciebie grupa jest liczbą (podejrzewam autonumer) to zbędna staje się część związana z apostrofami.
Drugim problemem jest przecinek w liczbie ułamkowej. Prawdopodobnie Access "wrzucił" wartość z przecinkiem do kodu, który wymaga kropki. (testowałem na liczbach całkowitych).
Spróbuj jednego z dwóch rozwiązań,
Dla grupy typu znakowego:
select tblTABLICA.grupa,
tblTABLICA.ilosc,
tblTABLICA.nazwa,
"TOP " & DCount("*","tblTABLICA","[ilosc] >" &replace ([ilosc],"," , ".") & " and grupa = '" & [grupa] & "'") + 1 as top_ilosc
from tblTABLICA
where DCount("*","tblTABLICA","[ilosc] >" &replace ([ilosc],"," , ".") & " and grupa = '" & [grupa] & "'")<=4;[/quote]> [quote]
lub dla grupy typu liczbowego:
select tblTABLICA.grupa,
tblTABLICA.ilosc,
tblTABLICA.nazwa,
"TOP " & DCount("*","tblTABLICA","[ilosc] >" &replace ([ilosc],"," , ".") & " and grupa = " & [grupa] ) + 1 as top_ilosc
from tblTABLICA
where DCount("*","tblTABLICA","[ilosc] >" &replace ([ilosc],"," , ".") & " and grupa = " & [grupa] )<=4;[/quote]> [quote]
(tym razem nie sprawdzałem na bazie - więc mogą być literówki)
Działa bezbłędnie:
SELECT smd.grupa, smd.ilosc, smd.nazwa, "TOP " & DCount("*","smd","[ilosc] >" & Replace([ilosc],",",".") & " and grupa = " & [grupa])+1 AS top_ilosc
FROM smd
WHERE (((DCount("*","smd","[ilosc] >" & Replace([ilosc],",",".") & " and grupa = " & [grupa]))<=4))
ORDER BY smd.grupa, "TOP " & DCount("*","smd","[ilosc] >" & Replace([ilosc],",",".") & " and grupa = " & [grupa])+1;
ale na małej bazie kilkanaście rekordów....
na tej którą muszę przerobić nie widać postępu.... -
Wielkie dzięki za wskazówki ale
Nie wiem dlaczego ale nie działa ........
select smd.grupa,
smd.ilosc,
smd.nazwa,
"TOP " & DCount("*","smd","[ilosc] >" & [ilosc] & " and grupa = '" & [grupa] & "'") + 1 as top_ilosc
from smd
where DCount("*","smd","[ilosc] >" & [ilosc] & " and grupa = '" & [grupa] & "'")<=4;
Zwraca kilkukrotnie NIEODPOWIEDNI TYP DANYCH W WYRAŻENIU KRYTERIUM i później "Błąd skladniowy (przecinek) w wyrażeniu kwerendy `[ilosc]>163,87 and grupa =`52". "
?????????
DRUGA
SELECT grupa,ilosc,nazwa (SELECT Count(*)
FROM smd As T1
WHERE T1.ilosc<=smd.ilosc and smd.grupa=T1.grupa) AS LP, smd.nazwa, *
FROM smd
WHERE ((((SELECT Count(*)
FROM smd As T1
WHERE T1.ilosc<=smd.ilosc and smd.grupa=T1.grupa))<6))
ORDER BY smd.ilosc DESC;
Niby wykonuje kwerendę ale żadnych efektów nie dzieje się nic
????????????????? -
Nie do końca rozumię.
jakie 2 kwerendy?
mam tabelę połączoną z excela o nazwie smd
w tabeli jest kilka kolumn:
grupa / nazwa / ilość / wartość
wierszy jest ponad 90000
potrzebuję z każdej grupy jest ich około 50 zrobić tabelę lub kwerendę która pokaże tylko 5 największych wartości dla każdej grupy. wiem najpierw przesortować potem użyć TOP tylko jak bo nic mi nie wychodzi........ -
Witam,
Potrzebuję z tabeli wyciągnąć po 5największych wartości w każdej grupie
Tabela ma pola:
grupa, ilość, nazwa
z każdej grupy potrzebuję uzyskać po 5 największych wartości
tak żeby wyglądało to tak
grupa1 / top1 ilość / nazwa
grupa1 / top2 ilość / nazwa
grupa1 / top3 ilość / nazwa
grupa1 / top4 ilość / nazwa
grupa1 / top5 ilość / nazwa
grupa2 / top1 ilość / nazwa
grupa2 / top2 ilość / nazwa
grupa2 / top3 ilość / nazwa
grupa2 / top4 ilość / nazwa
grupa2 / top5 ilość / nazwa
i tak dalej
przeszukałem już wszystko i nic nie umiem znaleźć pomóżcie