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


Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 08:50:54 - Per Hultqvist, i forum sql-server/msde, Tråden har 16 Kommentarer och lästs av 1910 personer

Hej

Är det någon som vet hur man kan skapa en kommaseparerad sträng utifrån rader i en tabell på ett ännu enklare sätt än detta?
<code>
DECLARE @EmployeeList varchar(100)

SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') +
CAST(Emp_UniqueID AS varchar(5))
FROM SalesCallsEmployees
WHERE SalCal_UniqueID = 1

SELECT @EmployeeList
</code>
Problemet med ovanstående är att det måste läggas i en UDF och att det blir väldigt långsamt. Jag skulel vilja hitta en lösning där man slipper anropet till UDF:en, dvs så att den blir inline och kan läggas direkt i vyn där den kommaseparerade strängen skall in. Just nu så tar det för 12000 poster 3.5 minuter (!) att bli klar, medans det om jag ej tar med de två kommaseparerade fälten endast tar ca 5 sekunder...Det är alltså en helt oacceptabel prestandaförlust med ovanstående metod :-(


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 08:59:26 - Pontus Wång

En cursor i en SP borde vara aningen snabbare iaf...


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 09:03:12 - Fredrik Malmström

Varför vill du ha en komma separerad rad med poster från en tabell?

Brukar vara intressant att veta! :)




Svara

Sv:Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 09:38:21 - Per Hultqvist

Min applikation är ett ärendehanteringssystem för programvaruutvecklingsföretag. Varje ärende (bugg, önskemål e t c) kan kopplas till en eller fler kunder. Så det är i ärendelistan som jag vill visa vilka kunder som ärendet är kopplat till, genom att skapa en kommaseparerad lista på kunder/kundnummer i vyn som jag använder för detta.

Ett sätt att komma runt detta är att använda hirarki-funktionalitetn i gridden (Janus GridEx), med kunderna som egna rader under ärendena, men det kräver ju lite jobb att få det att funka och jag måste släppa en ny version ganska omgående.


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 09:40:09 - Fredrik Malmström

Ahh då hänger jag med!

När det är omgående då är det kämpigt..


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 11:07:57 - Ola Lindfeldt

Vem vill sitta och glo på en kommaseparerad lista med unika ID:n då? Det känns inte som att beställaren har tänkt rätt? :) En bättre lösning är kanske att visa en COUNT(customerId) och visa det som en klickbar länk t.ex. [4 st] och när man klickar på den fälls det ned en ruta eller poppar upp ett fönster med en lista på dessa kunders namn osv. Klassisk master/details lösning. Och kanske trevligare för användaren egentligen. För hur blir din lista om 28 kunder har ett ärende. Det blir nog inte snyggt att 28 unika ID:n skall visas i en kolumn.


Svara

Sv:Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 11:16:24 - Per Hultqvist

Det är iofs inte ID:na som listas, utan en lista med kundnamn och en lista med kundnummer...men jag gillar ändå tanken med den klickbara länken och sedan öppna ett detailfönster. Det kan vara enklare väg än hierarkisk data om jag inte lyckas lösa kommasepareringen.


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 11:57:34 - Håkan Borneland

Om du använder 2005/2008 kan du göra på följande sätt (hoppas jag klistrade in rätt från din fråga).

<code>
SELECT SUBSTRING((SELECT (', ' + Emp_UniqueID)
FROM SalesCallsEmployees
WHERE SalCal_UniqueID = 1
FOR XML PATH('')), 3, 2000) AS EmployeeList
FROM SalesCallsEmployees
WHERE SalCal_UniqueID = 1;
</code>

Att du får prestandasänkning med UDF är inget konstigt då den ger ett Cursorliknande beteende.
Till Pontus: Cursor är aldrig rätt verktyg vid prestanda (aldrig annars heller, om det kan undvikas).

/Håkan


Svara

Sv:Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 13:50:46 - Per Hultqvist

Det ser ut som att det fungerar som jag vill att det ska göra. Jag skall testa om prestandan är acceptabel när jag kommer hem ikväll...Tack för tipset...


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 14:36:44 - Håkan Borneland

Den borde ge helt ok prestanda.


Svara

Sv:Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 14:41:45 - Per Hultqvist

Jag får inte riktigt till det i mitt sammanhang dock. Min huvudtabell heter Task och Customer innehåller så klart de rader som skall kommasepareras. Mellan dessa finns Rel_TaskCustomr, en kopplingstabell (många-till-många).

Task:
ID
Header

Rel_TaskCustomer:
TaskID
CustomerID

Customer:
ID
Name

Så här långt har jag kommit :
<code>
SELECT ID, Header ,(
SELECT SUBSTRING((SELECT (', ' + Customer.Name)
FROM Rel_TaskCustomer
LEFT OUTER JOIN Customer ON Customer.ID = Rel_TaskCustomer.CustomerID
WHERE Rel_TaskCustomer.TaskID = Task.ID
FOR XML PATH('')), 3, 2000) AS CustomerList
FROM Rel_TaskCustomer
WHERE Rel_TaskCustomer.TaskID = Task.ID
) as CustomerList
FROM Task
</code>

Det ger dock följande fel:
<info>
Msg 512, Level 16, State 1, Line 3
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
</info>
Data returneras dock, men fälter CustomerList blir null hela tiden....


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 19:46:26 - Håkan Borneland

Prova detta:

<code>
SELECT
ID,
Header,
CustomerList = SUBSTRING((SELECT (', ' + [Name])
FROM Customer
WHERE ID IN (SELECT CustomerID FROM Rel_TaskCustomer WHERE TaskID = Task.ID)
FOR XML PATH('')), 3, 2000)
FROM Task
GROUP BY ID, Header;
</code>

/Håkan


Svara

Sv:Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 21:53:41 - Per Hultqvist

Nice, fungerade utmärkt. Tack!


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-02 22:05:37 - Håkan Borneland

Prestandan ok?

/Håkan


Svara

Sv:Skapa kommaseparerad sträng i SQL

Postades av 2008-09-03 09:06:34 - Per Hultqvist

Japp, den gamla lösnignen tog 3.5 minuter, nu tog den 5 sekunder för 10000+ poster, så det var stooooor skillnad :-)


Svara

Sv: Skapa kommaseparerad sträng i SQL

Postades av 2008-09-03 09:29:33 - Håkan Borneland

Gôtt, låter ok.

/Håkan


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 615
27 953
271 709
5 569
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