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


Rader till en kolumn (MER BEKYMMER!!)

Postades av 2002-06-20 09:03:58 - Fredrik Salomonsson, i forum sql-server/msde, Tråden har 9 Kommentarer och lästs av 1794 personer

Hej.

Anta att jag har två tabeller:

'tblCustomer' men följande fält:
-cID
-cFirstName
-cLastName

'tblPhone':
-pID
-cID
-pNumber

Min fråga är:

Hur gör jag om jag vill samla alla kundens telefonnummer i en enda kolumn? Gärna kommaseparerade...
Mitt önskade format från DB:n är alltså:

cID, cFirstName, cLastName, PhoneNumbers






Svara

Sv: Rader till en kolumn

Postades av 2002-06-20 10:43:38 - Andreas Hillqvist

Har för mig att man inte kan köra en update på en join. Men annars så kanske detta fungerar:


CREATE TABLE #Result (cID INT, cFirstName VARCHAR(50), cLastName VARCHAR(50), PhoneNumbers VARCHAR(255))

INSERT INTO #Result (cID, cFirstName, cLastName, PhoneNumbers)
SELECT (cID, cFirstName, cLastName, '')
FROM tblCustomer

UPDATE #Result INNER JOIN tblPhone ON #Result.cID = tblPhone.cID SET PhoneNumbers = PhoneNumbers + ', ' + tblPhone.pNumber

SELECT *
From #Result

DROP TABLE #Result


Svara

Sv: Rader till en kolumn

Postades av 2002-06-20 12:37:32 - Christoffer Hedgate

Jodå, du kan joina i en update. Dock var där något enstaka fel i ditt exempel. Följande kod ger alla telefonnummer i PhoneNumbers-fältet. Observera att den förutsätter att cID och pID är något heltalsid-fält som är primärnyckel.



CREATE TABLE #Result (cID INT, cFirstName VARCHAR(50), cLastName VARCHAR(50), PhoneNumbers VARCHAR(255))

INSERT INTO #Result (cID, cFirstName, cLastName, PhoneNumbers)
SELECT cID, cFirstName, cLastName, ''
FROM tblCustomer

DECLARE @cID int, @pID int
SELECT @cID = MIN(cID) FROM #Result

WHILE @cID > 0
BEGIN
SELECT @pID = MIN(pID) FROM tblPhone WHERE cID = @cID
WHILE @pID > 0
BEGIN
UPDATE #Result SET PhoneNumbers = CASE WHEN LEN(PhoneNumbers) > 0 THEN PhoneNumbers + ',' + p.pNumber ELSE p.pNumber END
FROM #Result r
INNER JOIN tblPhone p ON r.cID = p.cID
WHERE p.pID = @pID

SELECT @pID = MIN(pID) FROM tblPhone WHERE cID = @cID AND pID > @pID
END
SELECT @cID = MIN(cID) FROM #Result WHERE cID > @cID
END

SELECT *
From #Result

DROP TABLE #Result


Svara

Sv: Rader till en kolumn

Postades av 2002-06-20 14:46:50 - Fredrik Salomonsson


Tackar hjärtligast. Härligt :)

Trevlig midsommar båda två...


Svara

Sv: Rader till en kolumn

Postades av 2002-06-20 15:26:45 - Andreas Hillqvist

Nu är jag hemma. Var på väg till träningem så hade ingen möjlighet att testa.

Fick lite insperation från din kod. Tror jag lyckats skriva ett effektivare sätt att utföra det på:

CREATE TABLE #Result (cID INT, cFirstName VARCHAR(50), cLastName VARCHAR(50), PhoneNumbers VARCHAR(255))

INSERT INTO #Result (cID, cFirstName, cLastName)
SELECT cID, cFirstName, cLastName
FROM tblCustomer

DECLARE @cID int, @temp varchar(255)

SELECT @cID = MIN(#Result.cID)
FROM #Result

WHILE @cID > 0
BEGIN
SET @temp = ''

SELECT @temp = @temp + ', ' + tblPhone.pNumber
FROM tblPhone
WHERE cID = @cID

IF @temp <> ''
BEGIN
SET @temp = SUBSTRING(@temp, 3, LEN(@temp))

UPDATE #Result SET PhoneNumbers = @temp
FROM #Result
WHERE #Result.cID = @cID
END

SELECT @cID = MIN(#Result.cID)
FROM #Result
WHERE #Result.cID > @cID
END

SELECT *
FROM #Result

DROP TABLE #Result


Svara

Sv: Rader till en kolumn

Postades av 2002-06-20 16:44:09 - Christoffer Hedgate

Det är sant, det är något effektivare att bygga upp phonenumbers-strängen i en sql-fråga istället för i en loop som jag gjorde, men det viktigaste är iaf att man inte använder en cursor för att göra det.


Svara

Sv: Rader till en kolumn

Postades av 2002-06-24 16:32:52 - Fredrik Salomonsson

Jag löste frågan med eran hjälp. Tack för det!

Nu har jag dessvärre mer bekymmer....

När jag kör frågan via Query Analyser fungerar det perfekt men när jag försöker anropa den via ADO så så får jag ett stängt recordset tillbaka....

Jag _vet_ (tror jag) :) att syntaxen i koden är korrekt. Anropar andra sp:s med parametrar och dom funkar bra...

Jag tror jag satt rätt rättigheter på den också.

Kan det ha med det temporära tabellen att göra??? Den tas ju bort efter att SQL Server levererat resultatet... ? Kanske ADO tappar nån referens till källan då?

Är det något speciellt skall tänka på när man arbetar med temporära tabeller??

Jag är säkert helt fel ute... snälla hjälp.




Svara

Sv: Rader till en kolumn

Postades av 2002-06-24 16:48:29 - Christoffer Hedgate

Prova detta:


SET NOCOUNT ON

CREATE TABLE #Result (cID INT, cFirstName VARCHAR(50), cLastName VARCHAR(50), PhoneNumbers VARCHAR(255))

INSERT INTO #Result (cID, cFirstName, cLastName)
SELECT cID, cFirstName, cLastName
FROM tblCustomer

DECLARE @cID int, @temp varchar(255)

SELECT @cID = MIN(#Result.cID)
FROM #Result

WHILE @cID > 0
BEGIN
SET @temp = ''

SELECT @temp = @temp + ', ' + tblPhone.pNumber
FROM tblPhone
WHERE cID = @cID

IF @temp <> ''
BEGIN
SET @temp = SUBSTRING(@temp, 3, LEN(@temp))

UPDATE #Result SET PhoneNumbers = @temp
FROM #Result
WHERE #Result.cID = @cID
END

SELECT @cID = MIN(#Result.cID)
FROM #Result
WHERE #Result.cID > @cID
END


SET NOCOUNT OFF

SELECT *
FROM #Result


Svara

Sv: Rader till en kolumn

Postades av 2002-06-24 17:04:04 - Fredrik Salomonsson

TACK, TACK, TACK, TACK, TACK!!!!


Det funkade... Nu skall jag bara läsa vad kommandot gör... :)


Svara

Sv: Rader till en kolumn

Postades av 2002-06-25 09:01:23 - Emma Magnusson

Anledningen till NOCOUNT ON/OFF är att du bara kan få ett resultset
tillbaka till VB.

Testar du att köra frågan som den såg ut från början kommer du se
att du får flera. NOCOUNT OFF talar om att du bara vill ha slutresultatet,
inte veta hur många rader som returnerats etc. I alla fall har jag fattat
det så, finns säkert de som kan utveckla om jag är ute på tunn is...

/Emma


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 616
27 953
271 709
5 627
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