/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Gruppering af data
Fra : Summa


Dato : 20-06-04 13:24

Hej NG,

Jeg har følgende problem som jeg håber I kan hjælpe med: (MS-SQL server
2000)

Et udtræk som fx:

"select id, fornavn, (select top 1 id from testdata) as testid, efternavn
from navnetabel order by fornavn"

Jeg ville gerne have dette grupperet efter efternavn...jeg antager at jeg
skal bruge "group by" klausulen, men den brokker sig over at id, fornavn osv
ikke er en del af klausulen hvis jeg fx indsætter "group by efternavn".

Hvad kan jeg gøre for at gruppere disse data?

--
Mvh
Summa



 
 
Kristian Damm Jensen (20-06-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 20-06-04 19:42

"Summa" <summa@summarium.dk> wrote in message news:<cb3vkm$2ukn$1@news.cybercity.dk>...
> Hej NG,
>
> Jeg har følgende problem som jeg håber I kan hjælpe med: (MS-SQL server
> 2000)
>
> Et udtræk som fx:
>
> "select id, fornavn, (select top 1 id from testdata) as testid, efternavn
> from navnetabel order by fornavn"
>
> Jeg ville gerne have dette grupperet efter efternavn...jeg antager at jeg
> skal bruge "group by" klausulen, men den brokker sig over at id, fornavn osv
> ikke er en del af klausulen hvis jeg fx indsætter "group by efternavn".
>
> Hvad kan jeg gøre for at gruppere disse data?

Du kan ikke gruppere efter noget, der ikke er med i din select. Er du
i øvrigt sikker på, at du mener "gruppere" i den betydning SQL
benytter? Det giver nemlig i det store hele kun mening at benytte
group by, hvis man anvender en aggregeringsfunktion (sum, max e.l.)

Lidt eksempeldata til at vise, hvad det egentlig er du vil, vil fremme
forståelsen.

VH
Kristian

Summa (20-06-2004)
Kommentar
Fra : Summa


Dato : 20-06-04 20:17

Hej,

"Kristian Damm Jensen" <damm@ofir.dk> wrote in message
news:2c9e2992.0406201041.394b4876@posting.google.com...

> Lidt eksempeldata til at vise, hvad det egentlig er du vil, vil fremme
> forståelsen.

Jeg har læst om klausulen hele dagen og prøvet lidt af hvert...det er vist
IKKE den klausul jeg er efter...Jeg er dog lidt usikker på om jeg
overhovedet kan få løst problemet med standard SQL. Her er et eksempel:

"select n.id, n.firstname, n.lastname, c.categoryname
from n join category c on n.categoryid = c.id
where c.id in (2,5,8,1,3)
order by c.categoryname desc, n.firstname asc"

Hvor:
Tabel c : (id int, categoryname nvarchar(100)):
Tabel n :( id int, categoryid int, firstname ntext, lastname
ntext)

Jeg vil gerne have dette resulttat sorteret som skrevet i listen, dvs poster
hvor c.id=2, dernæst poster hvor c.id = 5, og derefter c.id=8 osv osv
osv....

Alternativet er et sqlkald for hvort c.id. men det bliver omkostningsfuldt
hvis der bare er 3-4 c.id 'er :) Det _må_ da kunne laves med een sætning?


--
mvh
Summa






Kristian Damm Jensen (21-06-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 21-06-04 07:08

"Summa" <summa@summarium.dk> wrote in message news:<cb4nrn$npd$1@news.cybercity.dk>...
> Hej,
>
> "Kristian Damm Jensen" <damm@ofir.dk> wrote in message
> news:2c9e2992.0406201041.394b4876@posting.google.com...
>
> > Lidt eksempeldata til at vise, hvad det egentlig er du vil, vil fremme
> > forståelsen.
>
> Jeg har læst om klausulen hele dagen og prøvet lidt af hvert...det er vist
> IKKE den klausul jeg er efter...Jeg er dog lidt usikker på om jeg
> overhovedet kan få løst problemet med standard SQL. Her er et eksempel:
>
> "select n.id, n.firstname, n.lastname, c.categoryname
> from n join category c on n.categoryid = c.id
> where c.id in (2,5,8,1,3)
> order by c.categoryname desc, n.firstname asc"
>
> Hvor:
> Tabel c : (id int, categoryname nvarchar(100)):
> Tabel n :( id int, categoryid int, firstname ntext, lastname
> ntext)

Nej. Dette er ikkke et eksempel. Dette viser, hvordan du tror du kan
løse problemet. Jeg efterspurgte *data*.

> Jeg vil gerne have dette resulttat sorteret som skrevet i listen, dvs poster
> hvor c.id=2, dernæst poster hvor c.id = 5, og derefter c.id=8 osv osv
> osv....

Hvorfor det? Det er misvisende at kalde det en sortering ud fra disse
data. Jeg formoder at der ligger en dybereliggende grund bag.

> Alternativet er et sqlkald for hvort c.id. men det bliver omkostningsfuldt
> hvis der bare er 3-4 c.id 'er :) Det _må_ da kunne laves med een sætning?

Sikkert. Man kan lave de mest forbløffende ting i én sql-sætning. Men
det forudsætter, at man forstår opgaven. Og det gør jeg i al fald ikke
endnu.

VH
Kristian

Kenneth Brun Nielsen (21-06-2004)
Kommentar
Fra : Kenneth Brun Nielsen


Dato : 21-06-04 17:08


"Summa" <summa@summarium.dk> skrev i en meddelelse
news:cb4nrn$npd$1@news.cybercity.dk...
> "select n.id, n.firstname, n.lastname, c.categoryname
> from n join category c on n.categoryid = c.id
> where c.id in (2,5,8,1,3)
> order by c.categoryname desc, n.firstname asc"
>
> Hvor:
> Tabel c : (id int, categoryname nvarchar(100)):
> Tabel n :( id int, categoryid int, firstname ntext, lastname
> ntext)
>
> Jeg vil gerne have dette resulttat sorteret som skrevet i listen, dvs
poster
> hvor c.id=2, dernæst poster hvor c.id = 5, og derefter c.id=8 osv osv
> osv....
>
> Alternativet er et sqlkald for hvort c.id. men det bliver omkostningsfuldt
> hvis der bare er 3-4 c.id 'er :) Det _må_ da kunne laves med een sætning?
>

Hvis jeg forstår spørgsmålet korrekt kan du sagtens lave det i een sætning,
omend ikke specielt elegant.

Med udgangspunkt i ovennævnte eksempel kan det fx. gøres ved flg.:
"
SELECT n.id, n.firstname, n.lastname, c.categoryname, CASE c.id WHEN 2 THEN
1
WHEN 5 THEN 2
WHEN 8 THEN 3
WHEN 1 THEN 4
WHEN 3 THEN 5 END AS raekkefoelge
FROM n join category c on n.categoryid = c.id
WHERE c.id in (2,5,8,1,3)
ORDER BY raekkefolge desc, c.categoryname desc, n.firstname asc
"
Ikke særligt elegant, som nævnt, men det er svært at give bedre råd, når du
ikke fortæller mere om omstændighederne.

/Kenneth



Søg
Reklame
Statistik
Spørgsmål : 177493
Tips : 31966
Nyheder : 719565
Indlæg : 6408479
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste