Går det att slå ihop dessa SQL:er till en? Du borde väl kunna slå ihop dem med UNION. Jag kollade iofs inte så noga på dem men de såg ungefär likadana ut, bortsett från olika kolumnnamn (BästSV, BästEU etc). Kolumnerna får namn från första resultatet. Om du bara tar med nån kolumn för att indikera om det är SV, EU eller vrld så bör det väl fungera. Visst är det bättre att köra en fråga än 3. Det låter ju bra. Men jag måste då fråga, principen för UNION.... En UNION är helt onödig. Ta istället bort vilkoret för omr_Id och gruppera resultatet. Hej Andreas. Jag tror Christoffer Hedgate skulle löst det på samma sätt som mig om han haft tid att titta på frågan. Ber om ursäkt, jag trodde att jag hade get dig information så att det räckte. Ändra i ORDER BY: -JAg skulle gjort det så här: Ah, se där, nu läste jag inte ordentligt igen. Visst, är de i önskad ordning i omr_ID så är det bättre som Andreas skriver. Det kräver dock att de verkligen har samma surrogatnyckel alltid, dvs Sverige har id 1, Europa id 2 och Världen id 3. Och det känns ju egentligen lite dumt. Tack för hjälpem bägge två.Slå ihop tre stora SQL:er
Finns det någon prestandard vinnst med det?
<code>
SELECT t_SongTitlar.ArrNo, t_SongTitlar.songtitel, Min(t_Placering.Placering)
AS BästSv, Max(t_Placering.Placering) AS SämstSv, Avg(t_Placering.Placering) AS MedelSv,
Count(t_Placering.Placering) AS AntalRegSv
FROM t_Placering RIGHT JOIN t_SongTitlar ON t_Placering.ArrNo = t_SongTitlar.ArrNo
Where t_Placering.Placering <> 0
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Placering.omr_Id
Having (t_SongTitlar.songtitel = 'my friend' And ((t_Placering.omr_Id) = 1))
ORDER BY Min(t_Placering.Placering), Avg(t_Placering.Placering)
//bäst sämst medel antal i eu
SELECT t_SongTitlar.ArrNo, t_SongTitlar.songtitel, Min(t_Placering.Placering)
AS BästEu, Max(t_Placering.Placering) AS SämstEu, Avg(t_Placering.Placering)
AS MedelEu, Count(t_Placering.Placering) AS AntalRegEu
FROM t_Placering RIGHT JOIN t_SongTitlar ON t_Placering.ArrNo = t_SongTitlar.ArrNo
Where t_Placering.Placering <> 0
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Placering.omr_Id
Having (t_SongTitlar.songtitel = 'my friend' And t_Placering.omr_Id = 2)
ORDER BY Min(t_Placering.Placering), Avg(t_Placering.Placering)
//bäst sämst medel antal i vrld
SELECT t_SongTitlar.ArrNo, t_SongTitlar.songtitel, Min(t_Placering.Placering)
AS BästVärld, Max(t_Placering.Placering) AS SämstVärld, Avg(t_Placering.Placering)
AS MedelVärld, Count(t_Placering.Placering) AS AntalRegVarld
FROM t_Placering RIGHT JOIN t_SongTitlar
ON t_Placering.ArrNo = t_SongTitlar.ArrNo
Where t_Placering.Placering <> 0
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Placering.omr_Id
Having (t_SongTitlar.songtitel = 'my friend' And t_Placering.omr_Id = 3)
ORDER BY Min(t_Placering.Placering), Avg(t_Placering.Placering)
</code>Sv: Slå ihop tre stora SQL:er
Sv: Slå ihop tre stora SQL:er
Kan tyvätt inte det.Sv: Slå ihop tre stora SQL:er
SELECT t_Placering.omr_Id, t_SongTitlar.ArrNo,
t_SongTitlar.songtitel,
Min(t_Placering.Placering) AS Bäst,
Max(t_Placering.Placering) AS Sämst,
Avg(t_Placering.Placering) AS Medel,
Count(t_Placering.Placering) AS AntalReg
FROM t_Placering RIGHT JOIN
t_SongTitlar ON t_Placering.ArrNo = t_SongTitlar.ArrNo
WHERE t_Placering.Placering <> 0 AND
t_SongTitlar.songtitel = 'my friend'
GROUP BY t_Placering.omr_Id,
t_SongTitlar.ArrNo,
t_SongTitlar.songtitel
ORDER BY t_Placering.omr_Id, Min(t_Placering.Placering),
Avg(t_Placering.Placering) Sv: Slå ihop tre stora SQL:er
Detta är tydligen din starkaste sida, och det fungerar ju helt perfekt.
En sak omr_Id skrivs ju ut som 1,2,3. Hur gör jag för att få skriptet att skriva ut värdet i området istället(Sverige,Europa,Världen)?
Värdet finns i t_Område.Område
Jag försökte att lägga till det, men då fick jag ett error.Sv: Slå ihop tre stora SQL:er
Du kan ju testa med följande:
SELECT t_Område.Område,
t_SongTitlar.ArrNo,
t_SongTitlar.songtitel,
Min(t_Placering.Placering) AS Bäst,
Max(t_Placering.Placering) AS Sämst,
Avg(t_Placering.Placering) AS Medel,
Count(t_Placering.Placering) AS AntalReg
FROM t_SongTitlar LEFT JOIN
t_Placering ON t_Placering.ArrNo = t_SongTitlar.ArrNo LEFT JOIN
t_område ON t_placering.omr_id = t_område.omr_id
WHERE t_Placering.Placering <> 0 AND
t_SongTitlar.songtitel = 'my friend'
GROUP BY t_Område.Område,
t_SongTitlar.ArrNo,
t_SongTitlar.songtitel
ORDER BY t_Område.Område, Min(t_Placering.Placering),
Avg(t_Placering.Placering)
Eftersom du inte namnet på fälten som länkad t_placering med t_område sökte jag upp ett tidigare inlägg. Det underlättar om du bifoga denna information. ;o)Sv: Slå ihop tre stora SQL:er
Nu tycker nog du att jag är knepig, det här fungerade ju kanon utom sorteringen.
Jag skulle vilja ha
Sverige
Europa
Världen.
Nu är det
Europa
Sverige
Världen.
Är det knepigt att göra det?Sv: Slå ihop tre stora SQL:er
ORDER BY CASE t_Område.Område WHEN 'Sverige' THEN 1 WHEN 'Europa' THEN 2 ELSE 3 ENDSv: Slå ihop tre stora SQL:er
SELECT t_Område.Område,
t_SongTitlar.ArrNo,
t_SongTitlar.songtitel,
Min(t_Placering.Placering) AS Bäst,
Max(t_Placering.Placering) AS Sämst,
Avg(t_Placering.Placering) AS Medel,
Count(t_Placering.Placering) AS AntalReg
FROM t_SongTitlar LEFT JOIN
t_Placering ON t_Placering.ArrNo = t_SongTitlar.ArrNo LEFT JOIN
t_område ON t_placering.omr_id = t_område.omr_id
WHERE t_Placering.Placering <> 0 AND
t_SongTitlar.songtitel = 'my friend'
GROUP BY t_Område.omr_Id,
t_Område.Område,
t_SongTitlar.ArrNo,
t_SongTitlar.songtitel
ORDER BY t_Område.omr_Id, Min(t_Placering.Placering),
Avg(t_Placering.Placering)
Använda t_Område.omr_Id istället. Men varför har du det inte i bokstavsordning?Sv: Slå ihop tre stora SQL:er
Sv: Slå ihop tre stora SQL:er
Ang sorteringsordningen. Jag registrera placeringen av mina låtar som jag har på mp3.com. Det känns lite bättre att sartera de först Sverige sen EU sen övriga Världen.
SQL:en blev helt kanon, än en gång tack.