Jag försöker att göra en SQL till en SP. Kan det vara att den är längre än 20 tecken? Ja och vill man öka prestanda ytterligare så är Having bättre än where-villkor i de flesta fall: Nu fungerar det, men när jag skall försöka att optimera enligt era förslag, så åker jag på patrull. Har kommit lite längre: Det saknas ett mellanslagSQL till Stored Procedure
Det blir galet, resultaten bli olika, varför???
<code>
SP:n
CREATE Procedure spFyllGrid
(@songtitel varchar(20))
As
SELECT t_songtitlar.songtitel, t_placering.Datum,
Sum(CASE t_område.Område WHEN 'Sverige' THEN t_placering.Placering ELSE 0 END)
AS Sverige,
Sum(CASE t_område.Område WHEN 'Europa' THEN t_placering.Placering ELSE 0 END)
AS Europa,
Sum(CASE t_område.Område WHEN 'Världen' THEN t_placering.Placering ELSE 0 END)
AS Världen
FROM t_songtitlar
INNER JOIN (t_område
INNER JOIN t_placering ON t_område.omr_Id = t_placering.omr_Id)
ON t_songtitlar.ArrNo = t_placering.ArrNo
Where t_SongTitlar.songtitel = @songtitel
GROUP BY t_songtitlar.songtitel, t_placering.Datum
ORDER BY t_placering.Datum DESC
GO
SQL:
SELECT t_songtitlar.songtitel, t_placering.Datum,
Sum(CASE t_område.Område WHEN 'Sverige' THEN t_placering.Placering ELSE 0 END)
AS Sverige,
Sum(CASE t_område.Område WHEN 'Europa' THEN t_placering.Placering ELSE 0 END)
AS Europa,
Sum(CASE t_område.Område WHEN 'Världen' THEN t_placering.Placering ELSE 0 END)
AS Världen
FROM t_songtitlar
INNER JOIN (t_område
INNER JOIN t_placering
ON t_område.omr_Id = t_placering.omr_Id)
ON t_songtitlar.ArrNo = t_placering.ArrNo
WHERE t_songtitlar.Songtitel = '" & List1.Text & "'
GROUP BY t_songtitlar.songtitel, t_placering.Datum
ORDER BY t_placering.Datum DESC
</code>
Dom är likadana, men ger olika resultat???Sv: SQL till Stored Procedure
Du skulle kunna optimera frågan om du arbetde mot t_placering.omr_Id istället för t_område.Område. Att jämföra tal går snabbara än strängar. Samt att du slipper en join.
t_område:
omr_Id Område
1 'Sverige'
2 'Europa'
3 'Världen'
CREATE Procedure spFyllGrid
(@songtitel varchar(50))
As
SELECT t_songtitlar.songtitel, t_placering.Datum,
Sum(CASE t_område.omr_Id WHEN 1 THEN t_placering.Placering ELSE 0 END)
AS Sverige,
Sum(CASE t_område.omr_Id WHEN 2 THEN t_placering.Placering ELSE 0 END)
AS Europa,
Sum(CASE t_område.omr_Id WHEN 3 THEN t_placering.Placering ELSE 0 END)
AS Världen
FROM t_songtitlar INNER JOIN t_placering ON t_songtitlar.ArrNo = t_placering.ArrNo
WHERE t_SongTitlar.songtitel = @songtitel
GROUP BY t_placering.Datum, t_songtitlar.songtitel
ORDER BY t_placering.Datum DESC Sv: SQL till Stored Procedure
CREATE Procedure spFyllGrid
(@songtitel varchar(50))
As
SELECT t_songtitlar.songtitel, t_placering.Datum,
Sum(CASE t_område.omr_Id WHEN 1 THEN t_placering.Placering ELSE 0 END)
AS Sverige,
Sum(CASE t_område.omr_Id WHEN 2 THEN t_placering.Placering ELSE 0 END)
AS Europa,
Sum(CASE t_område.omr_Id WHEN 3 THEN t_placering.Placering ELSE 0 END)
AS Världen
FROM t_songtitlar INNER JOIN t_placering ON t_songtitlar.ArrNo = t_placering.ArrNo
GROUP BY t_placering.Datum, t_songtitlar.songtitel
HAVING t_SongTitlar.songtitel = @songtitel
ORDER BY t_placering.Datum DESC Sv: SQL till Stored Procedure
Error 107:
The culumn prefix't_område' does not match with a table name or alias name use in the query.
The culumn prefix't_område' does not match with a table name or alias name use in the query.
The culumn prefix't_område' does not match with a table name or alias name use in the query.
Jag antar att det har med detta att göra:
t_område:
omr_Id Område
1 'Sverige'
2 'Europa'
3 'Världen'
Hur löser jag det???Sv: SQL till Stored Procedure
<code>
CREATE Procedure spFyllGrid
(@songtitel varchar(50))
As
SELECT t_songtitlar.songtitel, t_placering.Datum,
Sum(CASE t_område.omr_Id WHEN 1 THEN t_placering.Placering ELSE 0 END)
AS Sverige,
Sum(CASEt_område.omr_Id WHEN 2 THEN t_placering.Placering ELSE 0 END)
AS Europa,
Sum(CASE t_område.omr_Id WHEN 3 THEN t_placering.Placering ELSE 0 END)
AS Världen
FROM t_songtitlar INNER JOIN t_placering ON t_songtitlar.ArrNo = t_placering.ArrNo
GROUP BY t_placering.Datum, t_songtitlar.songtitel
HAVING t_SongTitlar.songtitel = @songtitel
ORDER BY t_placering.Datum DESC
GO
</code>
Nu får jag ett error 156:
Incorrect syntax near the keyword 'WHEN'
Vad tror ni???Sv: SQL till Stored Procedure
Sum(CASEt_område.omr_Id WHEN 2
här
Jag ser inte heller att du har med t_område i from.