Vinnaren i pepparkakshustävlingen!
2011-06-08, 00:42
  #1
Medlem
faddoos avatar
Jag har lyckats med att skapa en SQL query som funkar förutom en sista grej, att den visar antal användare flera gånger och vill att den skall visas en gång bara under en tabell.
Jag använder SQL med ASP.NET

Kod:
SELECT TOP 50 Users.Username AS Användare, ROUND(StatisticsMain.TotalMinutes / 60, 0) AS Timmar
FROM ((Usergroups INNER JOIN Users ON Users.UsergroupID = Usergroups.ID) INNER JOIN StatisticsMain ON StatisticsMain.UserID = Users.ID)
WHERE (Usergroups.ID = 2) AND (StatisticsMain.StartDateTime BETWEEN #5/2/2011# AND #6/2/2011#)
ORDER BY StatisticsMain.TotalMinutes DESC

BILD: http://data.fuskbugg.se/skalman02/4d...a770_count.jpg
__________________
Senast redigerad av faddoo 2011-06-08 kl. 01:13.
Citera
2011-06-08, 01:16
  #2
Medlem
Edit: Prova SELECT DISTINCT istället för SELECT?
Citera
2011-06-08, 01:17
  #3
Medlem
faddoos avatar
Citat:
Ursprungligen postat av kimpie
Edit: Prova SELECT DISTINCT istället för SELECT?

ORDER BY-instruktionen (StatisticsMain.TotalMinutes) stämmer inte med DISTINCT.
__________________
Senast redigerad av faddoo 2011-06-08 kl. 01:20.
Citera
2011-06-08, 03:05
  #4
Medlem
Citat:
Ursprungligen postat av faddoo
Jag har lyckats med att skapa en SQL query som funkar förutom en sista grej, att den visar antal användare flera gånger och vill att den skall visas en gång bara under en tabell.
Jag använder SQL med ASP.NET

Kod:
SELECT TOP 50 Users.Username AS Användare, ROUND(StatisticsMain.TotalMinutes / 60, 0) AS Timmar
FROM ((Usergroups INNER JOIN Users ON Users.UsergroupID = Usergroups.ID) INNER JOIN StatisticsMain ON StatisticsMain.UserID = Users.ID)
WHERE (Usergroups.ID = 2) AND (StatisticsMain.StartDateTime BETWEEN #5/2/2011# AND #6/2/2011#)
ORDER BY StatisticsMain.TotalMinutes DESC

BILD: http://data.fuskbugg.se/skalman02/4d...a770_count.jpg
Är en hyggligt smal sak att lösa men det ser ut som att det finns två varianter vilka i sin tur beror på vad det är du vill få ut egentligen. Vill du har största värdet på antalet TotalMinutes per användare eller vill du ha totala värdet på TotalMinutes per användare. Utgår vi ifrån det första så blir det:
Kod:
SELECT TOP 50 U.Username AS [Användare], 
ROUND(X.TotalMinutes / 60, 0) AS [Timmar]
FROM UserGroups UG
JOIN Users U ON U.UserGroupID = UG.ID
JOIN
(
SELECT UserID, MAX(TotalMinutes) AS [TotalMinutes]
FROM StatisticsMain
WHERE StartDateTime BETWEEN #5/2/2011# AND #6/2/2011#
GROUP BY UserID
) X ON X.UserID = U.ID
WHERE UG.ID = 2
ORDER BY 2 DESC
Försökte att köra på rätt kolumn- och tabellnamn men läs gärna igenom en gång innan du copy-pastar ifall jag skrivit något fel.
Citera
2011-06-08, 12:10
  #5
Medlem
faddoos avatar
Tack för svar SirPatman!

Query du skrev fungerade bra men det räknar inte sammanlagt TotalMinutes
Bilden jag befogade förklarar en del, om du kollar så ser du att fler användare visar och jag vill att att "GROUP BY Users.Username" men jag får syntax fel med "ROUND"
Jag har också provat med "DISTINCT, COUNT och SUM".

Jag har pratat med en SQL-kunnig snubbe men han visste inte heller vad felet var.

Jag hoppas att någon därute vet hur man fixar detta, skulle jag vara jätte tacksam.
Citera
2011-06-08, 12:51
  #6
Medlem
Citat:
Ursprungligen postat av faddoo
Tack för svar SirPatman!

Query du skrev fungerade bra men det räknar inte sammanlagt TotalMinutes
Bilden jag befogade förklarar en del, om du kollar så ser du att fler användare visar och jag vill att att "GROUP BY Users.Username" men jag får syntax fel med "ROUND"
Jag har också provat med "DISTINCT, COUNT och SUM".

Jag har pratat med en SQL-kunnig snubbe men han visste inte heller vad felet var.

Jag hoppas att någon därute vet hur man fixar detta, skulle jag vara jätte tacksam.
Byt ut MAX mot SUM i min subquery i så fall.
Citera
2011-06-08, 14:59
  #7
Medlem
faddoos avatar
SUM funkade utmärkt och det är sådär jag exakt ville ha det, Tack så mycket för hjälpen!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback