Avatar billede dd_ns Nybegynder
16. april 2002 - 16:12 Der er 28 kommentarer

group by...

det ser sådan her ud:

SELECT data.range_id FROM data INNER JOIN status ON data.status_id = status.id WHERE (status.app_status = 2) AND (data.typen = 1) AND (data.product_id = 5 GROUP BY data.range_id

Jeg vil gerne have uniq_id fra data istedet for range_id, men det skal group by på range_id


Hvordan?

Avatar billede misbruger Nybegynder
16. april 2002 - 16:17 #1
SELECT data.uniq_id FROM data INNER JOIN status ON data.status_id = status.id WHERE (status.app_status = 2) AND (data.typen = 1) AND (data.product_id = 5 GROUP BY data.range_id
Avatar billede dd_ns Nybegynder
16. april 2002 - 16:20 #2
Har jeg prøvet.. Jeg får:

[Microsoft][ODBC SQL Server Driver] Column 'data.uniq_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause...


Andre bud
Avatar billede bennytordrup Nybegynder
16. april 2002 - 16:32 #3
Prøv ORDER BY i stedet for Group By
Avatar billede dd_ns Nybegynder
16. april 2002 - 16:35 #4
Ja, men det skal jo netop tage alle uniq_id, men kunne group by på range_id
Avatar billede ocp Nybegynder
16. april 2002 - 22:23 #5
Du kan ikke bare lave en "group by" uden at have et formål med at gruppere, f.eks. lave en sum eller et gennemsnit af tal.
Jeg gætter på at du gerne vil have følgende:

SELECT data.range_id, data.uniq_id FROM data INNER JOIN status ON data.status_id = status.id WHERE (status.app_status = 2) AND (data.typen = 1) AND (data.product_id = 5) ORDER BY data.range_id, data.uniq_id

Der kan du altså IKKE bruge en Group By.
Avatar billede dd_ns Nybegynder
17. april 2002 - 09:43 #6
Jamn jeg vil jo gerne have det grupperet efter range_id og have uniq_id ud. Det må da kunne lade sig gøre.
Avatar billede bennytordrup Nybegynder
17. april 2002 - 09:44 #7
Hvad har du af data? (eksempel)
Hvad vil du have ud? (eksempel)
Avatar billede dd_ns Nybegynder
17. april 2002 - 09:48 #8
hvad mener du?
Hvad vil du have.

Hvis du for det her til at virke for du flere point
Avatar billede bennytordrup Nybegynder
17. april 2002 - 09:54 #9
De data, du vil køre forespørgslen på, hvordan ser de ud?

Hvordan vil du have resultatet af forespørgslen til at se ud?

Som ocp skriver, kan du ikke bruge Group By hvis du ikke summerer, beregner gennemsnit eller lignende i din select del.
Avatar billede dd_ns Nybegynder
17. april 2002 - 09:56 #10
Jeg skal have uniq_id ud fra data med disse kriterier:

INNER JOIN status ON data.status_id = status.id WHERE (status.app_status = 2) AND (data.typen = 1) AND (data.product_id = 5)

Jeg skal have uniq_id ud fra en grupering efter range_id..

Er det forståeligt.?
Avatar billede bennytordrup Nybegynder
17. april 2002 - 09:59 #11
Hvilke felter vil du vise?
Avatar billede dd_ns Nybegynder
17. april 2002 - 09:59 #12
jeg skal kun bruge uniq_id
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:02 #13
select distinct data.uniq_id
from data
INNER JOIN status ON data.status_id = status.id WHERE (status.app_status = 2) AND (data.typen = 1) AND (data.product_id = 5)
order by data.range_id
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:02 #14
Du kan ikke bruge group by i ovenstående, da der ikke er noget at gruppere efter.

Er det forståeligt? ;-)
Avatar billede dd_ns Nybegynder
17. april 2002 - 10:03 #15
Fejl:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

Men så sætter jeg vel vare data.range_id op i selecten.
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:04 #16
Præcis, men så vil du muligvis få flere data.uniq_id, hvis der er flere range_id per uniq_id
Avatar billede dd_ns Nybegynder
17. april 2002 - 10:25 #17
Der er flere range_id per uniq_id...

Men det må da kunne lade sig gøre på en eller anden måde.
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:29 #18
select data.uniq_id, Count(data.range_id) as dummy
from data
INNER JOIN status ON data.status_id = status.id WHERE (status.app_status = 2) AND (data.typen = 1) AND (data.product_id = 5)
group by data.range_id
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:30 #19
Det giver dig så et dummyfelt, som viser antallet af range_id per uniq_id. Men her er der så en Count, og den giver mulighed for at bruge group by (aggregat-funktion).
Avatar billede dd_ns Nybegynder
17. april 2002 - 10:30 #20
Men jeg for: Column 'data.uniq_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:33 #21
Det skulle også være

group by data._uniq_id
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:33 #22
sorry
Avatar billede dd_ns Nybegynder
17. april 2002 - 10:35 #23
Jamn nu bliver det jo gruperet efter uniq_id... Det skal gruperes efter range_id
Avatar billede bennytordrup Nybegynder
17. april 2002 - 10:55 #24
Som jeg forstår det, så har du en uniq_id, hvor der for hver uniq_id i samme tabel er et antal range_id. Du vil have vist èn uniq_id sorteret efter range_id?

Hvordan f*nd*n vil du det, hvis du kun vil vise en uniq_id? Så er rækkefølgen af range_id da ligegyldig.
Avatar billede dd_ns Nybegynder
17. april 2002 - 11:02 #25
se her:

Range_id:        Uniq_id:
129              12
129              13
129              14
130              15
130              16
130              17

Her vil jeg så gerne have et uniq_id fra hver range_id gruppe.. Det er ligemeget om det er den første eller nummer 2 eller numer 3... Bare en af dem.
Avatar billede bennytordrup Nybegynder
17. april 2002 - 11:03 #26
Det nævnte du ikke!

select Min(data.uniq_id) as MinUniq_ID, data.range_id
from data
INNER JOIN status ON data.status_id = status.id WHERE (status.app_status = 2) AND (data.typen = 1) AND (data.product_id = 5)
group by data.range_id
Avatar billede bennytordrup Nybegynder
06. maj 2002 - 20:54 #27
Fik du løst dit problem?
Avatar billede bennytordrup Nybegynder
08. august 2002 - 00:39 #28
Hallo, respons?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester