Avatar billede lazeric Nybegynder
05. september 2008 - 09:47 Der er 5 kommentarer og
1 løsning

Samle flere kolloner i en

Jeg har en tabel hvor jeg har alle de produkter der tilhører et kundenummer, men der er en ny linie for hvert produkt.
Jeg vil gerne lave et view der viser mig alle de produkter en kunde har, men på samme linie. Eventuelt kommasepareret i en kolonne.
Avatar billede arne_v Ekspert
06. september 2008 - 04:41 #1
Den slags plejer man at lave i applikations koden og ikke i SQL'en.
Avatar billede Syska Mester
07. september 2008 - 13:41 #2
Du kan lave det med en Custom Aggregate function.

// ouT
Avatar billede lazeric Nybegynder
08. september 2008 - 08:22 #3
Jeg har ikke mulighed for at lave det i applikationskoden da det skal laves til et system der ikke er Open Source.

Buzzzz: Kan du give mig et eksempel på hvordan jeg skulle lave den Custom Aggregate function? Hvis nu vi siger at vi bare har kollonerne "KundeID" og "Produkt".
Avatar billede Syska Mester
08. september 2008 - 09:14 #4
http://www.google.com/search?hl=en&q=custom+aggregate+functions+.net+mssql&aq=f&oq=
http://www.google.com/search?hl=en&q=mssql+custom+aggregate+string+concatenation

Den giver en masse hits om hvordan de kan laves ...

Det skulle være en løsning til .NET C# ... håber det virker. Selvom jeg nok ville gøre som arne_v ... men hvis det ikke er en mulighed, så er dette nok vejen frem som du selv er inde på.
http://dotnet-enthusiast.blogspot.com/2007/05/user-defined-aggregate-function-in-sql.html
Avatar billede lazeric Nybegynder
08. september 2008 - 11:17 #5
Tak for linksene. Det hjalp og jeg har fundet en løsning der virker.
Læg et svar :-)

Her er den lidt snavsede løsning som jeg fandt frem til:

SELECT KundeID,
MAX(CASE seq WHEN 1 THEN Produkt ELSE '' END) + ', ' +
MAX(CASE seq WHEN 2 THEN Produkt ELSE '' END) + ', ' +
MAX(CASE seq WHEN 3 THEN Produkt ELSE '' END) + ', ' +
MAX(CASE seq WHEN 4 THEN Produkt ELSE '' END) + ', ' +
MAX(CASE seq WHEN 5 THEN Produkt ELSE '' END) + ', ' +
'osv... indtil jeg har nok cases til at have alle produkterne....

MAX(CASE seq WHEN 20 THEN Produkt ELSE '' END)

FROM (SELECT    t1.KundeId, t1.Produkt,
      (SELECT COUNT(*)
        FROM dbo.view_TeleKonto_Abonnementer t2
        WHERE t2.KundeId = t1.KundeId AND t2.Produkt <= t1.Produkt)
          FROM dbo.view_TeleKonto_Abonnementer t1) D (KundeId, Produkt, seq)
GROUP BY KundeId;
Avatar billede Syska Mester
08. september 2008 - 17:34 #6
svar
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