---
title: "Sortera beroende på annan tabell"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/123085-sortera-beroende-på-annan-tabell"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Obbelix"
published: "2005-02-23T09:25:27.000Z"
updated: "2005-02-23T16:28:38.000Z"
replies: 11
views: 404
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/123085-sortera-beroende-på-annan-tabell"
---

# Sortera beroende på annan tabell

## #1 — Obbelix, 2005-02-23T09:25Z

Håller på med ett system för en hockeyturnering där det förmodlingen kommer bli så att en spelare kan ha flera nummer under turneringes gång. Så jag har gjort en separat tabell som hanterar alla spelares tröjnummer. Allt lugnt så långt men nu vill jag ju så klart på översikten på spelarna sortera dessa efter just tröjnummer. Dessutom ska alla nummer den spelaren haft finnas med, så i min hjärna går det inte med en "inner join" av den typ jag kan.

Tabellerna ser ut som följer:

**Players**
\-id
\-tournament_id
\-player_name
\-player_born
etc...

**Players_numbers**
\-id
\-player_id
\-player_number

Det jag vill är alltså att kunna loopa ut alla spelare med dess nummer sorterat på just nummer, ex:

2       - Olle Olsson
3, 5   - Pelle Persson
4, 12 - Sven Svensson

Men hur ska SQL satsen se ut?

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

## #2 — @nders, 2005-02-23T09:28Z

I SQL-frågan räcker det bra med en vanlig inner join. När du sedan i ASP-koden loopar fram datat, så får du sätta en kontrollvariabel så du kan ha koll på när det kommer en ny spelare, eller ett nytt tröjnummer på samma spelare.

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

## #3 — LarsG, 2005-02-23T09:30Z

```
select playerName,player_number,
(select min(player_number) 
from player_numbers
where player_id = p.player_id) as shirtNumber
from Players as p inner join Players_numbers pn
on p.player_id = pn.player_id
order by shirtNumber
```

Flyttas från ASP

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

## #4 — Obbelix, 2005-02-23T10:12Z

Tack, men det funkar inte riktigt som önskat.
Om jag har en spelare med tre olika tröjnummer blir det följande:

1 - Olle
1 - Olle
1 - Olle

fast Olle har nummer 1,2 och 3.

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

## #5 — LarsG, 2005-02-23T10:19Z

Om du har så borde frågan returnera

OLLE 1 1
OLLE 2 1
OLLE 3 1

Om du vill presentera det på en rad så får hantera det i din applikation.

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

## #6 — Obbelix, 2005-02-23T10:44Z

Fel av mig tidigare. 
Nu får jag ut det som du skriver, men vill ju ha som i mitt första inlägg. Och där är det tvärstopp. Så nu kanske tråden ligger i fel forum igen :) Eller kan man direkt från SQL frågan få ut numren kommaseparerad?

Jag får som sagt ut:

1 Olle
2 Olle
3 Olle
2 Pelle
4 Pelle

Men vill ha ut:
1,2,3 Olle
2,4 Pelle

nummer och namn på samma rad dock inom olika "\<td\>"

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

## #7 — LarsG, 2005-02-23T11:39Z

Det går att ordna direkt i SQL men ser lite olika ut beroende på DBMS.

För att göra det i ASP

```
pName = ""
cnt = 0
while not rs.eof
   if pName <> rs("player_name") then
      if  pName <> "" then response.write "<br>"
      pname = rs("player_name")
      response.write pname
      cnt = 0
   end
   if cnt > 0 then response.write ", "
   response.write rs("player_number")
   cnt = cnt + 1
   rs.movenext
wend
if pName <> "" then response.write "<br>"
```

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

## #8 — Obbelix, 2005-02-23T12:21Z

Fick göra om den lite för att få numren före namnet.

```
while not rs.eof
 if pName <> rs("player_name") then
  if pName <> "" then 
   response.Write("<br>" & nummer & pName)
   nummer = ""
   pName = ""
  end if
 pname = rs("player_name")
 cnt = 0
 end if
			
 if cnt > 0 then nummer = nummer & ","
 nummer = nummer & rs("player_number")
 cnt = cnt + 1
rs.movenext
wend

if pName <> "" then response.write("<br>" & nummer & pName)
```

Går säkert att göra på annat sätt, men denna funkar.

Använder MSSQL så om det går att få till det drekt i frågan kanske det är smidigare än all denna kod?

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

## #9 — LarsG, 2005-02-23T15:30Z

Du får skriva  en  function

```
create function wetShirts(@player_id int)
returns varchar(100)
as
begin
    declare @s varchar(100)
    select @s = coalesce(@s + ',','') + cast(player_number as varchar(5))  
    from player_numbers
where player_id = @player_id
   return @s
end
```

```
 select player_name,wetShirts(player_id),
(select min(player_number) 
from player_numbers
where player_id = p.player_id) as shirtNumber
from Players 
order by shirtNumber
```

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

## #10 — Obbelix, 2005-02-23T16:10Z

Ok.

Är inte värst hemma på MSSQL (första projektet med MSSQL) men som jag förstår är det alltså en "User Defined Function" som ska göras m.h.a Enterprise manager? Har i alla fall testat att göra en där och syntax säger ok. 
Har även satt att användaren får accessa funktionen men får följande fel när jag kör sql-satsen i asp:

```
Microsoft OLE DB Provider for SQL Server error '80040e14' 

'wetShirts' is not a recognized function name.
```

Ändå heter funktionen just wetShirts. 
SQL frågan utskriven är följande:

```
SELECT p.player_name,wetShirts(p.id), (SELECT min(player_number) 
FROM player_numbers where player_id = p.id) as 
shirtNumber from Players p ORDER BY shirtNumber ASC
```

Behöver det göras nåt mer?

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

## #11 — LarsG, 2005-02-23T16:20Z

Kom just på en sak, när man anropar egendefinierade funktioner i SQL server så måste man alltid ange namnet på den som skapat funktionen

```
select ..., obbelix.wetshirts(player_id), ...
```

eller vilket användarnamn du nu har.

Jag glömmer alltid bort det (eftersom det inte är standard bla bla och ointuivt bla bla och inte fungerar så i den DBMS jag använder bla bla).

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

## #12 — Obbelix, 2005-02-23T16:28Z

WOHOO! 
Funkar perfekt. Tackat tackar! 
Tror jag kör den i stället för den med massa kod (som i vissa fall blir "fel" om flera spelare har fler än ett nummer men något samma)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/123085-sortera-beroende-på-annan-tabell
