webForumDet fria alternativet
Logga in / Bli medlem

Distinct

Databaser & SQL

5 svar · 269 visningar · startad av HeHo

Medlem sedan apr. 2000277 inlägg
Frågan#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.

Medlem sedan dec. 200012 464 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.

Medlem sedan apr. 2000277 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......

Medlem sedan dec. 200012 464 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.)

Medlem sedan apr. 2000277 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!

Medlem sedan dec. 200012 464 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

261 ms totalt · 4 externa anrop · v20260731065814-full.0583408b
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)