Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


sql-fråga

Postades av 2002-10-17 14:09:15 - Andreas Högström, i forum sql-server/msde, Tråden har 5 Kommentarer och lästs av 708 personer

jag har en tabell "ProduktGrupper" med kolumnerna
PGID (primärnyckel)
Parent (numeric)
Namn (text)
eftersom en grupp kan innehålla undergrupper så är PGID är kopplat till Parent

frågan är hur jag skall få ut en vettig struktur med en select-fråga,
med

SELECT
dbo.ProduktGrupper.Namn, ProduktGrupper_1.Namn
FROM
dbo.ProduktGrupper
INNER JOIN
dbo.ProduktGrupper ProduktGrupper_1 ON dbo.ProduktGrupper.Parent = ProduktGrupper_1.PGID
GROUP BY dbo.ProduktGrupper.Parent, ProduktGrupper_1.Name, dbo.ProduktGrupper.Name

blir det

grupp
grupp
undergrupp
undergrupp
osv...

jag skulle vilja att det var sorterat med
grupp
undergrupp
undergrupp
grupp
undergrupp
grupp
osv...

nån som hänger med??


Svara

Sv: sql-fråga

Postades av 2002-10-17 16:44:20 - Magnus Gladh

Med en enkelt SELECT fråga blir det svårt...

Jag har dock hittat en sida i books online som gör en SP som kan lösa problemet, leta där eller kolla på denna sida:

http://www.gladh.nu/asphelp/svar18.html

- M


Svara

Sv: sql-fråga

Postades av 2002-10-18 09:07:45 - Christoffer Hedgate

Vet du hur många nivåer det kan vara?


Svara

Sv: sql-fråga

Postades av 2002-10-18 09:43:03 - Andreas Högström

nej...men jag håller på att lösa det fixxar lite med den sp:n jag fick tidigare, måste bara ha svar på min nya fråga :-)


Svara

Sv: sql-fråga

Postades av 2002-10-18 14:24:16 - Micke Hansson

Hejsan..

Detta är ett ständigt problem med SQL-Servern, jag tror att gränsen på hur många nivåer går vid 32.. Om du använder ADO så rekomenderar jag att fixa till det rekursiva i koden istället... Denna funktion räknar med att första fältet är ID och andra ParentID:et... Funktionen returnerar en exakt kopia på det recordset som du skickar in + ett fält som heter Level..

Public Function RecordsetRecursive(ByVal recOriginal As ADODB.Recordset, ByVal lngStartID As Long, ByVal bolRoot As Boolean) As ADODB.Recordset
On Error Resume Next
Dim recCopy As New ADODB.Recordset, fldField As ADODB.Field, arrRecursive As Variant, lngCounter As Long

Call recOriginal.MoveFirst

For Each fldField In recOriginal.Fields
Call recCopy.Fields.Append(fldField.Name, fldField.Type, fldField.DefinedSize)

recCopy.Fields(fldField.Name).NumericScale = fldField.NumericScale
recCopy.Fields(fldField.Name).Precision = fldField.Precision
Next

Call recCopy.Fields.Append("Level", adInteger)
Call recCopy.Open

arrRecursive = recOriginal.GetRows(, , Array(0, 1))

If Err.Number = 0 Then
Do While lngCounter <= UBound(arrRecursive, 2)
If lngStartID = 0 Then
If arrRecursive(1, lngCounter) = 0 Then
If bolRoot Then
Call Addchild(lngCounter, 0, recOriginal, recCopy)
End If

Call Findchilds(arrRecursive, arrRecursive(0, lngCounter), 1, recOriginal, recCopy)
End If
Else
If arrRecursive(0, lngCounter) = lngStartID Then
If bolRoot Then
Call Addchild(lngCounter, 0, recOriginal, recCopy)
End If

Call Findchilds(arrRecursive, arrRecursive(0, lngCounter), 1, recOriginal, recCopy)

Exit Do
End If
End If

lngCounter = lngCounter + 1
Loop

Call recCopy.MoveFirst
End If

Set RecordsetRecursive = recCopy
End Function

Private Sub Findchilds(arrRecursive As Variant, ByVal lngParentID As Long, ByVal lngLevel As Long, recOriginal As ADODB.Recordset, recCopy As ADODB.Recordset)
Dim lngCounter As Long

Do While lngCounter <= UBound(arrRecursive, 2)
If lngParentID = arrRecursive(1, lngCounter) Then
Call Addchild(lngCounter, lngLevel, recOriginal, recCopy)

Call Findchilds(arrRecursive, arrRecursive(0, lngCounter), lngLevel + 1, recOriginal, recCopy)
End If

lngCounter = lngCounter + 1
Loop
End Sub

Private Sub Addchild(ByVal lngRow As Long, ByVal lngLevel As Long, recOriginal As ADODB.Recordset, recCopy As ADODB.Recordset)
Dim fldField As ADODB.Field

Call recOriginal.Move(lngRow, 1)

Call recCopy.AddNew

recCopy("Level") = lngLevel

For Each fldField In recOriginal.Fields
If Not IsNull(fldField.Value) Then
recCopy(fldField.Name) = fldField.Value
End If
Next

Call recCopy.Update
End Sub

Micke


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 617
27 953
271 709
5 718
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies