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


Få resultat att hamna på samma rad

Postades av 2007-06-29 10:34:58 - Patrik Ahlberg, i forum sql-server/msde, Tråden har 11 Kommentarer och lästs av 1011 personer

Jag håller på och ska extrahera data från en SQL Server 2000 databas. Det är ett säljsystem.

Det jag ska ha ut är alla butiker med tillhörande information, samt säljare och dess kontaktpersoner.

Detta resultat ska jag ha in i excel senare.
Det jag fastnat på är kontaktpersoner som hämtas via en mellantabell (butik - butikkontaktperson - kontaktperson).

Jag skulle vilja att via en subquery eller dylikt kunna hämta alla butikens kontaktpersoner och få dom att hamna på samma rad med kanske ett kommatecken som avskiljare. Är detta möjligt?


Svara

Sv: Få resultat att hamna på samma rad

Postades av 2007-07-02 10:00:42 - Stefan Lindberg

Klart det är möjligt i SQL 2005, använd den nya featuren WITH som kan ses som en temporär vy men med möjligheten att använda den rekursivt som nedan:

CREATE TABLE dbo.personal (
id INT NOT NULL,
avdelning INT NOT NULL,
namn VARCHAR(255) NOT NULL
)
GO

INSERT INTO dbo.personal (id, avdelning, namn) VALUES (1, 1, 'stefan')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (2, 1, 'kalle')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (3, 1, 'henrik')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (4, 2, 'thomas')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (5, 2, 'agneta')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (6, 2, 'albin')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (7, 2, 'ingeborg')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (8, 3, 'håkan')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (9, 3, 'peter')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (10, 4, 'julle')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (11, 4, 'jesper')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (12, 4, 'johan')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (13, 4, 'anders')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (14, 4, 'per')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (15, 4, 'pelle')
INSERT INTO dbo.personal (id, avdelning, namn) VALUES (16, 5, 'christina')
GO

WITH rec (avdelning, counter, list, id, len)
AS (
SELECT avdelning,
COUNT(*) OVER (PARTITION BY avdelning),
CAST(namn AS VARCHAR(100)),
id,
1
FROM dbo.personal
UNION ALL
SELECT rec.avdelning,
rec.counter,
CAST(rec.list + ',' + p.namn AS VARCHAR(100)),
p.id,
rec.len + 1
FROM dbo.personal p, rec
WHERE p.avdelning = rec.avdelning
AND p.id > rec.id
)
SELECT avdelning,
list
FROM rec
WHERE len = counter
ORDER BY 1


Svara

Sv:Få resultat att hamna på samma rad

Postades av 2007-07-02 10:35:36 - Niklas Jansson

<b>>den nya featuren WITH</b>
Har inte WITH funnits sen SQL92-standarden kom?


Svara

Sv: Få resultat att hamna på samma rad

Postades av 2007-07-02 13:37:57 - Stefan Lindberg

Oops, jag såg inte att du körde SQL 2000, där kan du inte göra detta annat än via knöliga UDFer. WITH är inte implementerat i SQL 2000.

Jojo, WITH har funnits i standarden men å andra sidan så finns det ingen DB som fullt ut stödjer allt i SQL92 för att inte säga ännu mindre SQL99


Svara

Sv:Få resultat att hamna på samma rad

Postades av 2007-07-02 13:46:24 - Niklas Jansson

Jojo, men det är ju inte en "ny feature". Det är ju bara en implementation av en del av den standarden som programmet "ska" uppfylla.


Svara

Sv: Få resultat att hamna på samma rad

Postades av 2007-07-02 14:15:35 - Lars Berg

Nej, det kom i SQL99.


Svara

Sv:Få resultat att hamna på samma rad

Postades av 2007-07-02 14:33:25 - Niklas Jansson

Någon referens?
Enligt http://msdn2.microsoft.com/en-US/library/aa238507(SQL.80).aspx så verkar det som att WITH åtminstone införds som nyckelord i SQL92.


Svara

Sv: Få resultat att hamna på samma rad

Postades av 2007-07-02 14:54:10 - Stefan Lindberg

Sant att WITH kom som CTE funktion i SQL99, jag hanterar ibland SQL92 och 99 lite vårdslöst.

Att WITH listas som reserverat ord för SQL server betyder bara att sql server har en speciell funktion för den. WITH har funnits med ett tag i sql server eftersom den används i SELECT FROM WITH (table hints), DBCC DBCC COMMAND() WITH ... osv.

WITH i SQL99 standarden har betydelsen som (i sql servers termer) CTE eller Common Table Expression eller en form av temporär vy (rekursiv eller inte)


Svara

Sv:Få resultat att hamna på samma rad

Postades av 2007-07-02 15:13:02 - Niklas Jansson

Vad jag syftade på var:

<b>In addition, the SQL-92 standard defines a list of reserved keywords. Avoid using SQL-92 reserved keywords for object names and identifiers. The ODBC reserved keyword list (shown below) is the same as the SQL-92 reserved keyword list.
[...]

ODBC Reserved Keywords

[...]
WITH
</b>


Svara

Sv: Få resultat att hamna på samma rad

Postades av 2007-07-02 15:15:24 - Lars Berg

Ordet with förekom i SQL 92 bland annat i

datatyperna
time with timezone
timestamp with timezone

create view ...
with check option

grant ... with grant option


Svara

Sv:Få resultat att hamna på samma rad

Postades av 2007-07-02 15:46:01 - Stefan Lindberg

Utan att spåra ur i ämnet helt så kan det konstateras att WITH som Common Table Expression i SQL server inte finns i sql 2000 och äldre utan endast i sql 2005 och att WITH som CTE först finns i sql99 standarden.

Samt att CTE i sql2005 förenklar många knöliga sql frågor som exempelvis sträng-join funktionen som efterfrågades initialt


Svara

Sv: Få resultat att hamna på samma rad

Postades av 2007-07-02 16:11:09 - Patrik Ahlberg

Jag löste det precis genom att skapa en temptabell där jag hämtade ut alla butikerna + ett fält för kontaktpersoner. Sedan fyllde jag det fältet genom att använda en cursor och sedan använda temptabellen i orginalfrågan för att hämta kontaktpersonerna. Funkade perfekt efter lite pulande!


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 778
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