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


Göra om denna SQL till dynamsikt, beroende på hur många

Postades av 2003-01-28 15:51:49 - Benni Svensson, i forum sql-server/msde, Tråden har 6 Kommentarer och lästs av 759 personer

När det gäller mina låtar, kan det vara ifrån en till tre författare.
Mitt problem är att om det är mer än en författare, så visas alla fälten mer än en gång, med enda skillnaden att författarnamnen skilljer.

Så här skulle jag vilja ha det:

ArrNo Songtitel Kategori Album Namn(1) Namn(2) Namn(3) Hide Anteckningar
Om Namn(2) eller Namn(3) inte finns, så ville jag ha en tom post.

Så här ser min SQL ut idag.
<code>
SELECT t_SongTitlar.ArrNo,
t_SongTitlar.songtitel,
t_Kategori.Kategori,
t_Album.Album,
t_forfattare.namn,
t_SongTitlar.Stim,
t_SongTitlar.Hide,
t_SongTitlar.Anteck
FROM t_Kategori INNER JOIN
(t_Album INNER JOIN
((t_songtitlar LEFT JOIN t_songforfattare
ON t_songtitlar.ArrNo = t_songforfattare.ArrNo)
LEFT JOIN t_Forfattare
ON t_songforfattare.for_id = t_forfattare.for_id)
ON t_Album.CD_ID = t_SongTitlar.Album)
ON t_Kategori.Kat_ID = t_SongTitlar.Kategori
</code>
Hur bör jag ändra på denna SQL?


Svara

Sv: Göra om denna SQL till dynamsikt, beroende på hur må

Postades av 2003-01-28 16:18:54 - Per Hultqvist

Jag kan inte ge dig en komplett lösning men troligen måste du använda dig av subqueries. Någonting i stil med följande alltså :

Select
Title
, (Select Name from [table] where ???) As Name1
, (Select Name from [table] where ???) As Name2
, (Select Name from [table] where ???) As Name3
From [Table]
Where ???


Svara

Sv: Göra om denna SQL till dynamsikt, beroende på hur må

Postades av 2003-01-28 16:29:31 - Benni Svensson

Då försökte jag så här:
<code>
SELECT t_SongTitlar.ArrNo,
t_SongTitlar.Songtitel as Sångtitel,
t_Kategori.Kategori,
t_Album.Album,
(Select t_forfattare.Namn from t_forfattare where t_songtitlar.ArrNo = t_songforfattare.ArrNo) As Name1,
(Select t_forfattare.Namn from t_forfattare where t_songtitlar.ArrNo = t_songforfattare.ArrNo) As Name2,
(Select t_forfattare.Namn from t_forfattare where t_songtitlar.ArrNo = t_songforfattare.ArrNo) As Name3,
t_SongTitlar.Stim,
t_SongTitlar.Hide,
t_SongTitlar.Anteck
FROM t_Kategori INNER JOIN
(t_Album INNER JOIN
((t_songtitlar LEFT JOIN t_songforfattare
ON t_songtitlar.ArrNo = t_songforfattare.ArrNo)
LEFT JOIN t_Forfattare
ON t_songforfattare.for_id = t_forfattare.for_id)
ON t_Album.CD_ID = t_SongTitlar.Album)
ON t_Kategori.Kat_ID = t_SongTitlar.Kategori
</code>
och fick felet:

Server: Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Han hittar alltså att det är mera än en författare i vissa fall, men hur gör jag sedan?


Svara

Sv: Göra om denna SQL till dynamsikt, beroende på hur må

Postades av 2003-01-28 19:08:54 - Christoffer Hedgate

Denna selectsats bör fungera (den är dock kanske inte helt optimal i alla situationer):

SELECT s.ArrNo,
s.songtitel,
k.Kategori,
a.Album,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo ORDER BY t_songforfattare.for_id ASC) AS namn1,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo ORDER BY for_id ASC) ORDER BY t_songforfattare.for_id ASC) AS namn2,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo ORDER BY for_id ASC) ORDER BY t_songforfattare.for_id ASC)) AS namn3,
t_SongTitlar.Stim,
t_SongTitlar.Hide,
t_SongTitlar.Anteck
FROM t_Kategori AS k
INNER JOIN t_songtitlar AS s
ON k.kategori = s.Kategori
INNER JOIN t_Album AS a
ON s.Album = a.CD_ID


Svara

Sv: Göra om denna SQL till dynamsikt, beroende på hur må

Postades av 2003-01-28 20:42:42 - Benni Svensson

Tyvärr, när jag körde din kod, så fick jag följande felmedelande:

Server: Msg 107, Level 16, State 3, Line 1
The column prefix 't_SongTitlar' does not match with a table name or alias name used in the query.
Server: Msg 107, Level 16, State 1, Line 1
The column prefix 't_SongTitlar' does not match with a table name or alias name used in the query.
Server: Msg 107, Level 16, State 1, Line 1
The column prefix 't_SongTitlar' does not match with a table name or alias name used in the query.

Eftersom det fans utskrivet t_songtitlar, så försökte jag att ändra det till

nedanstående, men ändå fel (men det känns som om det är på rätt väg)

<code>
SELECT s.ArrNo,
s.songtitel,
k.Kategori,
a.Album,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo ORDER BY t_songforfattare.for_id ASC) AS namn1,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo ORDER BY for_id ASC) ORDER BY t_songforfattare.for_id ASC) AS namn2,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo ORDER BY for_id ASC) ORDER BY t_songforfattare.for_id ASC)) AS namn3,
s.Stim,
s.Hide,
s.Anteck
FROM t_Kategori AS k
INNER JOIN t_songtitlar AS s
ON k.kategori = s.Kategori
INNER JOIN t_Album AS a
ON s.Album = a.CD_ID
</code>

felmedelande:

Server: Msg 245, Level 16, State 1, Line 1
Syntax error converting the nvarchar value 'Soft Rock' to a column of data type int.

Felet kan vara av den anledningen att kategori är en uppslagstabell till t_kategori, där datatypen är int,null.
Det innebärju att det finns en siffra i t_songtitlar som skall hämta sitt värde ifrån tabellen t_kategori.
Phu, hur gör jag nu?


Svara

Sv: Göra om denna SQL till dynamsikt, beroende på hur må

Postades av 2003-01-28 21:43:17 - Christoffer Hedgate

Det var jag som skrivit ett litet fel i joinvillkoret för Kategori->Sångtitlar. Hade helt enkelt använt fel kolumnnamn.

<code>
SELECT s.ArrNo,
s.songtitel,
k.Kategori,
a.Album,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo ORDER BY t_songforfattare.for_id ASC) AS namn1,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo ORDER BY for_id ASC) ORDER BY t_songforfattare.for_id ASC) AS namn2,
(SELECT TOP 1 namn FROM t_songforfattare INNER JOIN t_forfattare ON t_songforfattare.for_id = t_forfattare.for_id WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo AND t_songforfattare.for_id > (SELECT TOP 1 for_id FROM t_songforfattare WHERE ArrNo = s.ArrNo ORDER BY for_id ASC) ORDER BY t_songforfattare.for_id ASC)) AS namn3,
s.Stim,
s.Hide,
s.Anteck
FROM t_Kategori AS k
INNER JOIN t_songtitlar AS s
ON k.Kat_Id = s.Kategori
INNER JOIN t_Album AS a
ON s.Album = a.CD_ID
</code>


Svara

Sv: Göra om denna SQL till dynamsikt, beroende på hur må

Postades av 2003-01-28 21:49:07 - Benni Svensson

Helt perfekt.
Om du bara visste hur glad jag blev nu. Jag har själv försökt både länge och väl, men denna SQL var lite för komplex för mig.
Ett jättetack till dig.


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 619
27 953
271 709
555
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