webForumDet fria alternativet

Group BY och inne join i samma fråga?

Databaser & SQL

8 svar · 378 visningar · startad av evilaid

Medlem sedan apr. 2009433 inlägg
Frågan#1

Hej..

Har fastnat lite och vet inte om jag tänker helt fel men jag har en group sats men behöver koppla frågan till en annan tabell. Går det?

group satsen ser ut så här och fungerar nu..

SELECT     hits.Page_ID, COUNT(*) AS antal
FROM         Hits AS hits INNER JOIN
                      pages ON hits.Page_ID = pages.Page_ID
WHERE     (hits.Customer_ID = 10) AND (hits.c_Date BETWEEN '2009-10-12 00:00:00' AND '2009-10-13 23:59:00')
GROUP BY hits.Page_ID
ORDER BY antal DESC

ni vill jag koppla kolumnen page_id till en tabell som heter "pages" så jag får fram namnet för varje "page_id" relationen till tabellen "pages" är hits.page_id=pages.id

Provade detta men får bara felet att pages.id inte ingår i den aggregerade funktionen

SELECT     hits.Page_ID, COUNT(*) AS antal, pages.ID
FROM         Hits AS hits INNER JOIN
                      pages ON hits.Page_ID = pages.Page_ID
WHERE     (hits.Customer_ID = 10) AND (hits.c_Date BETWEEN '2009-10-12 00:00:00' AND '2009-10-13 23:59:00')
GROUP BY hits.Page_ID
ORDER BY antal DESC

tacksam för lite råd?

mvh

Medlem sedan mars 20041 505 inlägg
#2

Du måste gruppera alla kolumner som inte körs genom en aggregatfunktion.
Lägg till pages.ID i GROUP BY så ska det funka fint.

Medlem sedan apr. 2009433 inlägg
#3

Opps

ok nu funkar det... Kan inte säga att jag är riktigt på det klarar hur man ska tänka med group by funktionen men men..

Tack för hjälpen

Medlem sedan aug. 20039 340 inlägg
#4

Som Troxy säger...
Vad GROUP BY gör är att gruppera ihop flera rader till en. pages.ID kan ju ha flera värden för varje givet värde av hits.Page_ID. Därmed är det en självmotsägelse att SELECTa hits.Page_ID direkt - vilket värde ska databashanteraren välja?
Du kan som Troxy säger pröva att lägga till pages.ID i GROUP BY, alt. SELECTa MIN(pages.ID) eller MAX(pages.ID) och få ut ett av värdena.

Medlem sedan apr. 2009433 inlägg
#5

en tanke bara..

Nu kör jag ju min inner join mot en tabell i samma databas, som det är nu är det en liten nödlösning för igentligen finns all information om sidan i en annna databas. Alltså tabellen "pages" finns i en annan databas... Hade det gått lösa på något sätt... Båda databserrna är Ms sql....

Medlem sedan aug. 20039 340 inlägg
Medlem sedan apr. 2009433 inlägg
#7

inte riktgit med på
databas2.dbo.customer c2
on c1.custid = c2.custid

måste man inte ansluta till den andra databasen på något vänster... Har ju annant lösenord osv för att göra kopplingen till den??

Medlem sedan aug. 20039 340 inlägg
#8

Jag bara googlar så jag har inga kodexempel, men kolla in sp_addlinkedserver.

Medlem sedan apr. 2009433 inlägg
#9

Oj... det var mer än jag pallade... Förstod knappt hälften av texten ju.. :)
Var ska man skriva allt det? i Sql frågan eller?

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)