webForumDet fria alternativet

Distinct

5 svar · 269 visningar · startad av HeHo

HeHoMedlem sedan apr. 2000163 inlägg
#1

Hur skriver jag en fråga där jag vill ha en av varje unik på kolumnen ordernr, men samtidigt kolla igenom alla värden i kolumnen Bil_Id?

har själv börjat så här:

Call init()
strSQL = "SELECT DISTINCT ordernr, BatchNr, lopnr FROM best WHERE BatchNr='" &batch& "' ORDER BY lopnr ASC"
Set objRS = objConnection.Execute(strSQL)	
i=1
Do until objRS.EOF
   [blue]'Här blir det naturligtvis fel när man inte plockar med den kolumnen i frågan.[/blue]
   If Cstr(objRS("Bil_Id")) = "0" then
      arrTab(i) = "1"
   else
      arrTab(i) = "0"
   end if
   arrID(i) = objRS("ordernr")
   i=i +1
   objRS.MoveNext()
Loop
Call CleanUP()

Fattar ni vad jag menar?? :x :x
Jag kan ju i och för sig göra en till fråga och jämföra Bil_id och stoppa in i vektorn, men jag är mest bara nyfiken på om man kan lösa det hela med en enda fråga.

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Något med group by förmodar jag borde passa.

Det jag inte förstår är vad du vill göra med bil_id.

Distinct appliceras alltid på alla kolumner så det är ingen framkomlig väg.

Kan du beskriva lite mer.

HeHoMedlem sedan apr. 2000163 inlägg
#3

OK! Jag vill kolla om Bil_Id är 0. Är Bil_Id 0 så hämtas även andra värden in från en annan tabell längre ned på denna ASP sida.
Samma Ordernr kan ju förekomma på flera rader med med olika Bil_Id. Men är Bil_Id 0 på en rad är alla andra med samma ordernr oxå 0. Ska fungera som en flagga. Bil_Id =0 så hämta in från en ny tabell.
Hmm...känns som jag inte kan förklara vad jag menar......

LarsGMedlem sedan dec. 200012 465 inlägg
#4
query = "select ordernr,min(bil_id) from best group by ordernr"
set rs = connect.execute(query)

while not rs.eof then
    if cint(rs("bil_id")) = 0 then
       'hämta mer
    end if
    rs.movenext
wend

borde väk gå bra. (Om inte bil_id kan vara negativt.)

HeHoMedlem sedan apr. 2000163 inlägg
#5

:e Ja va smart! GROUP BY hur funkar det då? Är det som DISTINCT eller vad? Jag har aldrig använt det tidigare........kanske måste ta och läsa lite i mina böcker... :e
Tack för hjälpen!

LarsGMedlem sedan dec. 200012 465 inlägg
#6

Distinct är bara ett specialfall av group by

select distinct aleb,bleb from ogrish

ger samma resultat som

select aleb,bleb from ogrish group by aleb,bleb

(Om du inte kör Oracle som av någon outgrundlig anledning inte tillåter den senare konstruktionen).

Det som skiljer group by från distinct är att man kan utföra aggregeringar på de kolumner som inte ingår i group by. Som i ditt fall, att man för varje grupp av ordernr hittar den bil_id som har lägsta värdet.

De aggregeringsfunktioner som finns i de flesta DBMS är

MAX -- hitta största värdet
MIN -- hitta minsta värdet
AVG -- beräkna genomsnittligt värde (för numeriska kolumner)
SUM -- Summera alla värden (för numeriska kolumner)
COUNT -- räkna antal förekomster

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb