---
title: "Strul med GROUP BY"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/58476-strul-med-group-by"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "G8"
published: "2002-11-08T22:24:40.000Z"
updated: "2002-11-09T19:58:43.000Z"
replies: 16
views: 318
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/58476-strul-med-group-by"
---

# Strul med GROUP BY

## #1 — G8, 2002-11-08T22:24Z

Jag använder mig av följande kodsnutt, och den verkar skriva ut rätt, men jag skulle vilja ha idrotter.region = 0 överst oavsett vad som finns mer i databasen, och därefter ska resten komma...

```
GROUP BY idrotter.region, idrotter.namn ORDER BY regioner.namn, idrotter.namn asc"
```

Editering: Hur skall man skriva för att skriva ut en GROUP i taget sen? Jag menar, vill ju skriva ut alla dör idrotter.region=0, sedan en radbrytning och därefter regioner.namn i stigande ordning...

Jag får inte till själva utskriften riktigt heller, skriver ut allt i en klump eller en radbrytning efter varje region...

Mvh

//G8

Permalänk: https://www.webforum.nu/p/58476

## #2 — LarsG, 2002-11-08T22:28Z

```
ORDER BY case region.id when 0 then 0 else 1 end
  region.namn, idrotter.namn
```

Red:

Varför har du group by då?

Permalänk: https://www.webforum.nu/p/850562

## #3 — G8, 2002-11-08T22:36Z

för att jag vill att den ska skriva ut i grupper om grupp, där region=0 överst och sedan fallande...

alltså så att det blir nått i stil med..

```
FOR EACH GROUP
response.write(<%="rs.region"%>"<p/>)
GROUP.MOVENEXT
LOOP
```

Jo, jag vet att den koden inte finns, men det kanske förklarar lite bättre hur jag vill att det ska fungera.. ;)

Mvh

//G8

Permalänk: https://www.webforum.nu/p/850586

## #4 — LarsG, 2002-11-08T22:43Z

Jo, men så blir det inte om du har med group by.  Ta bort det.

Det viktiga är order by

```
set rs = connect.execute(sql)
region = ""
while not rs.eof
  if rs("region") <> region then
'
'skriv ut region
'
    region = rs("region")
 end if
'
'skriv ut idrotter
'
  rs.movenext
wend
```

Permalänk: https://www.webforum.nu/p/850597

## #5 — G8, 2002-11-08T22:44Z

Men eftersom det kan finnas flera idrotter inom en och samma GROUP, så måste bli nått i stil med:

```
stm = "hämta data om regioner och idrotter GROUP BY idrotter.region, idrotter.namn ORDER BY regioner.namn, idrotter.namn asc"
rs1 = connection.execute("stm")
FOR EACH GROUP
stm2 = "hämtar information ang. de klubbar som finns registerade i aktuell idrott"
rs2 = connection.execute("stm2")
do until rs2.eof
response.write(<%=rs("region")%>, <%=rs2("klubbnamn")%>"<p/>)
rs2.movenext
loop
GROUP.MOVENEXT
LOOP
```

Ja, nått sånt där måste det väl bli antar jag...

Permalänk: https://www.webforum.nu/p/850598

## #6 — G8, 2002-11-08T22:48Z

Du hann visst för LarsG, påverkar mitt ovanstående inlägg nånting... ?

Mvh

Permalänk: https://www.webforum.nu/p/850601

## #7 — LarsG, 2002-11-08T22:58Z

Om group by är relevant eller inte beror på vad du hämtar, dvs hur select-listan ser ut. Vad vill du göra?

Permalänk: https://www.webforum.nu/p/850617

## #8 — G8, 2002-11-08T23:25Z

:) 

Min nuvarande kod:

```
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#3D4B5B">
<table width="504" border="0" cellpadding="0" cellspacing="1">

<%
Sportid = request.querystring("LID")
set connection = Server.CreateObject("ADODB.Connection")
Connection.Open "databasen"
count = 1

stm = "SELECT idrotter.id AS idrottsid, idrotter.namn AS idrottsnamn, idrotter.antal_klubbar, idrotter.aktiv, idrotter.Senaste_matchen, idrotter.region, regioner.namn AS idrottsregion FROM idrotter INNER JOIN regioner ON regioner.id = idrotter.region WHERE idrotter.idrottsid="& Sportid &" AND aktiv=-1 GROUP BY idrotter.region, idrotter.namn ORDER BY regioner.namn, idrotter.namn asc"
%>

<tr> 
<td width="150" height="20">&nbsp;Idrott</td>
<td width="194" align="center">Ledare</td>
<td width="53" align="center">Region</td>
<td width="42" align="center">Klubbar</td>
<td width="59" align="center">Aktiv</td>
</tr>

<%
Do until rs1.eof

stm2 = "SELECT klubbar.id AS klubbid, klubbar.namn AS klubbnamn, klubbar.poang, klubbar.deleted, klubbar.hibernate, regioner.namn FROM klubbar INNER JOIN regioner ON klubbar.region = regioner.id WHERE klubbar.idrott="& rs1("idrottsid") &" AND klubbar.deleted=0 AND klubbar.hibernate=0 ORDER BY klubbar.poang desc"
set rs2 = Connection.Execute(stm2)

'lite kod för att växelvis ändra färg på cellerna i tabellen
if count mod 2 = 0 then
bgcolor = "#9AACBE"
else
bgcolor = "#BDC9D5"
end if
%>
<tr>

<%if rs2.eof then%>
<td bgcolor="<%=bgcolor%>"><img src="images/<%=rs1("idrottsnamn")%>.gif" alt=" <%=rs1("idrottsnamn")%> " width="150" height="13" border="0"></td>
<td align="center" bgcolor="<%=bgcolor%>">Inga registrerade klubbar</td>
<td align="center" bgcolor="<%=bgcolor%>"><img src="images/flags/na.gif" alt=" N/A " width="14" height="12"></td>
<td align="center" bgcolor="<%=bgcolor%>">0</td>
<td align="center" bgcolor="<%=bgcolor%>"><img src="images/no.gif" alt=" NO " width="23" height="13" border="0"></td>

<%else%>

<td bgcolor="<%=bgcolor%>"><a href="lista.asp?LID=<%=rs1("idrottsid")%>&SPORT=<%=SERVER.URLEncode(namn)%>&Idrott=<%=SERVER.URLEncode(rs1("idrottsnamn"))%>"><img src="images/<%=rs1("idrottsnamn")%>.gif" alt=" <%=rs1("idrottsnamn")%> " width="150" height="13" border="0"></a></td>
<td align="center" bgcolor="<%=bgcolor%>"><a href="klubbinfo.asp?klubbid=<%=rs2("klubbid")%>"><%=rs2("klubbnamn")%></a></td>
<td align="center" bgcolor="<%=bgcolor%>"><img src="images/flags/<%=rs2("namn")%>.gif" alt=" <%=rs2("namn")%> " width="14" height="12"></td>
<td align="center" bgcolor="<%=bgcolor%>"><%=rs1("antal_klubbar")%></td>
<td align="center" bgcolor="<%=bgcolor%>"> 
<%
Datum = DateDiff("d", Date, rs1("senaste_matchen"))
if CINT(datum) >= -21 then
response.write("<img src=" & "images/yes.gif" & " " & "alt=" & " YES " & " " & "width=" & "23" & " " & "height=" & "13" & " " & "border=" & "0" & ">")
else
response.write("<img src=" & "images/no.gif" & " " & "alt=" & " NO " & " " & "width=" & "23" & " " & "height=" & "13" & " " & "border=" & "0" & ">")
end if
%>
</td>
<%end if%>
</tr>
<%
count = count + 1
rs1.MoveNext
Loop
Rs1.Close
set rs1 = Nothing
Connection.close
Set connection = Nothing
%>
</table>
</td>
</tr>
</table>
```

Jag vill alltså att den skall lista så här:

Region: Internationellt
Fotboll -\> Klubben FF -\> flagga
Basket -\> Klubben BC -\> flagga

region: Blekinge
Hockey -\> Klubben HC -\> flagga
Bandy -\> Klubben BK -\> flagga
Pingis -\> Klubben BTK -\> flagga

Region: Halland
Fotboll -\> IFK Klubben -\> flagga
Pingis -\> BTK Klubben -\> flagga

Alltså, börja med region inernationellt (region=0) och sedan lista resterande regioner efter namn, i fallande ordning...

Blev det klarare nu? 

Mvh

//G8

Permalänk: https://www.webforum.nu/p/850649

## #9 — LarsG, 2002-11-08T23:33Z

Det skall inte vara någon group by i detta läge. Group är till för att ta bort duplikat.

Permalänk: https://www.webforum.nu/p/850656

## #10 — G8, 2002-11-08T23:36Z

ahh, ok...

hur 17 ska jag då få till en gruppering?

Min kunskap sträcker sig inte mkt längre än så här...  :r 

Mvh

//G8

Permalänk: https://www.webforum.nu/p/850661

## #11 — LarsG, 2002-11-08T23:57Z

Det blir med order by och att du sköter om det i ASP så som jag beskrev.

Permalänk: https://www.webforum.nu/p/850689

## #12 — G8, 2002-11-09T15:08Z

Hmm, har äntligen fått ordning på grupperingen, samt att avsluta tabbeler/tabellraderna rätt...

Var tvungen att gå ut en sväng och rensa skallen... ;)

Nu är det bara att få sorteringen i rätt ordning...

använder jag:

```
ORDER BY case region.id when 0 then 0 else 1 end,  region.namn, idrotter.namn
```

så sorterar den fortfarande i bokstavsordning, gör alltså inget undantag för region.id=0 som jag vill ha överst. Jag la till ett kommatecken efter end, får felmeddelande annars... påverkar det nått?

Kan jag lägga till flera kriterier i "ORDER BY Case", så att man t.ex. placerar region.id=0 först, sedan vill man ha region.id=24, sedan region.id=21 för att därefter sortera resten i fallande bokstavsordning?

Mvh

//G8

Permalänk: https://www.webforum.nu/p/851017

## #13 — G8, 2002-11-09T19:14Z

Fick till det till slut tror jag..

```
ORDER BY case when region.id  = 0 then 0 else 1 end,  region.namn, idrotter.namn
```

Region.id ska visst stå efter "when"...

//G8

Permalänk: https://www.webforum.nu/p/851123

## #14 — G8, 2002-11-09T19:23Z

btw: går det att bygga visare på order by case för att inkludera fler reservationer i sorteringen, typ:

```
ORDER BY case when region.id  = 0 then region.id=14 then region.id=17 else 1 end,  region.namn, idrotter.namn
```

Har testat att göra så som övan men det verkar ju inte fungera...

nån?

Mvh

//G8

Permalänk: https://www.webforum.nu/p/851128

## #15 — G8, 2002-11-09T19:30Z

Busenkelt ju... :)

```
ORDER BY case when region.id  = 0 then 0 else 1 end,  case when region.id  = 27 then 0 else 1 end, region.namn, idrotter.namn
```

Bara att lägga till en "case" sats ktill så löser det sig :)

//G8

Permalänk: https://www.webforum.nu/p/851129

## #16 — LarsG, 2002-11-09T19:41Z

Du kan ha flera when i en case

```
ORDER BY case when region.id  = 0 then 0 
                         when region.id  = 27 then 1 else 2 end,
region.namn, idrotter.namn
```

eller så kan du skriva

```
ORDER BY case region.id  
                when 0 then 0 
                when 27 then 1 else 2 end,
region.namn, idrotter.namn
```

Permalänk: https://www.webforum.nu/p/851134

## #17 — G8, 2002-11-09T19:58Z

Ok, det ser ju lite mer överskådligt ut kanske... ;)

Tack

//G8

Permalänk: https://www.webforum.nu/p/851144

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/58476-strul-med-group-by
