12. april 2007 - 22:43Der er
12 kommentarer og 1 løsning
underligt problem med SQL linje
Hej
Jeg har haft en del bøvl med en SQL linje de sidste par dage.
Jeg har PT denne linje i en Reader: ObjCmd = New OleDbCommand("SELECT DogImageTitle, DogImageDate FROM EnggaardImages ORDER BY DogImageDate DESC;", ObjConn)
Den virker fint og flg. bliver udskrevet: Fælles Billede Fælles Billede Fælles Billede Fælles Billede Fælles Billede Fælles Billede 2. Søndag Efterår 2006
Men laver jeg min linje om så jeg har GROUP BY DogImageTitle med som flg: ObjCmd = New OleDbCommand("SELECT DogImageTitle, DogImageDate FROM EnggaardImages GROUP BY DogImageTitle ORDER BY DogImageDate DESC;", ObjConn)
Så ville jeg forvente at den udskrev dette: Fælles Billede 2. Søndag Efterår 2006
Men intet bliver udskrevet...hvad er problemet !?.
Du kan i SQL ikke bruge et feltnavn, DogImageDate, som ikke indgår i din GROUP BY, med mindre den anvendes i en aggragat funktion (dvs i nogle sql-varianter kan man godt, selv om det ikke giver mening, fx i MySql).
@SoftSpot Jeg vil lave en liste over de titler der er i min database nogle af den kan være ens som du kan se på mit første udtræk, derefter vil jeg så counte den og skrive tallet bagved så hvis man kigger på min kode nu så får jeg dette:
Men jeg vil gerne have dette Fælles Billede (6) 2. Søndag (1) Efterår 2006 (1)
@Erikjacobsen Jeg bruger MS Access database, men beklager hvis jeg gav indtryk af noget andet mente bare med SQL at det var min Select linje
Hele min kode NU er flg. og den virker MEN ikke med Group BY og Count. (Bemærk at både DogImageDate og DogImageTitle er det samme altså for evt. "Fælles Billede" osv. så kan evt. GROUP BY DogImageDate hvis det er).
' Database Conn 7 Åben DB Public Sub OpenDB() Dim ObjConn As OleDbConnection Dim ObjCmd As OleDbCommand Dim ObjReader As OleDbDataReader Dim ConnectionString As String = ConfigurationManager.ConnectionStrings("ConnectionStringDogs").ConnectionString ObjConn = New OleDbConnection(ConnectionString) ObjCmd = New OleDbCommand("SELECT DogImageTitle, DogImageDate FROM EnggaardImages ORDER BY DogImageDate DESC;", ObjConn)
ObjCmd = New OleDbCommand("SELECT DogImageTitle, DogImageDate, COUNT(*) AS antal FROM EnggaardImages GROUP BY DogImageTitle, DogImageDate ORDER BY DogImageDate DESC;", ObjConn)
Okay, det viste jeg ikke lige, at det var det du mente.
Jeg fatter bare ikke at der KUN skal så lidt til så det bare driller, men det virker som det skal nu, ville se om jeg ikke godt kunne klare den fejl selv, selvom man er ny i .NET, det er jo den eneste måde at lære på det er ved at begå fejl og så lære af dem. :)
1000 tak til jeg begge for hurtig Respons.
Vil i ikke begge, eller nej forresten Erik mener du er en af den der hjælper for at glæde andre, men hvis du stadigvæk ikke vil have Point så kan du SoftSpot vel lige smide et svar.
Såvidt jeg kan se, manglede du at lave en sammentælling (dvs. COUNT(*)), som er den aggregat-funktion erik snakker om. Det er ved aggregat-funktioner du bruger GROUP BY - såvidt jeg ved... :)
@ Erik Ja men når jeg kørte siden i VS2005 så kom siden bare frem, den skrev ikke en fejl besked, og lavede jeg en debug så kørte den bare igennem uden at stoppe.
Ej hvor lækkert i er bare guder så fik jeg endelig min linje til at virke også:
ObjCmd7 = New OleDbCommand("SELECT DogImageTitle, DogImageDate, COUNT(*) AS antal FROM EnggaardImages WHERE DogImageDate NOT IN (SELECT TOP 1 DogImageDate FROM EnggaardImages ORDER BY DogImageDate DESC) GROUP BY DogImageTitle, DogImageDate ORDER BY DogImageDate DESC;", ObjConn7)
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.