Försöker att bygga en serietabell. Men fastnar på hur man ska kunna tilldela poäng för matchen: Varför har du med "AS Poang"? Ser lite skumt ut... Testa såhär istället: Menar du så här? Hur ser din tabellstruktur ut? Jag vet att det inte är svaret på din fråga men det skulle underlätta om jag får se hur du tänkt att datamodelleringen skall vara. Kollade lite i dokumentationen nu, såhär ska det nog se ut: Har byggt vidare på ditt förslag till serietabell och nu kommit fram till följande: Vad händer om du istället för Msg 195, Level 15, State 10, Line 2 Nu har jag fått fram följande resultat:SQL Fråga
<code>
SELECT t.Name, SUM(m.Resultathemma) AS Hemma, SUM(m.ResultatBorta) AS Borta,
SUM(m.Resultathemma-m.ResultatBorta) AS Diff
IF SUM(m.Resultathemma - m.Resultatborta) AS Poang = 0 THEN
Poang = 1
ELSE IF SUM(m.Resultathemma - m.Resultatborta) AS Poang > 0 THEN
Poang = -2
ELSE SUM(m.Resultathemma - m.Resultatborta) AS Poang < 0 THEN
Poang = 2
FROM Match m INNER JOIN
Team t ON m.LagIdHemma = t.TeamId
WHERE m.MatchId = m.MatchId
GROUP BY m.LagIdHemma, t.Name
</code>
Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'AS'.
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'AS'.Sv: SQL Fråga
SELECT t.Name, SUM(m.Resultathemma) AS Hemma, SUM(m.ResultatBorta) AS Borta,
SUM(m.Resultathemma-m.ResultatBorta) AS Diff
IF SUM(m.Resultathemma - m.Resultatborta) = 0 THEN
Poang = 1
ELSE IF SUM(m.Resultathemma - m.Resultatborta) > 0 THEN
Poang = -2
ELSE SUM(m.Resultathemma - m.Resultatborta) < 0 THEN
Poang = 2
FROM Match m INNER JOIN
Team t ON m.LagIdHemma = t.TeamId
WHERE m.MatchId = m.MatchId
GROUP BY m.LagIdHemma, t.Name
/Johan
Sv:SQL Fråga
SUM(m.Resultathemma - m.Resultatborta AS Poang)
Det fungerade inte.
Vill få ut en serietabell
Lag Antmatcher V O F Diff PoängSv: SQL Fråga
Sv: SQL Fråga
SELECT t.Name, SUM(m.Resultathemma) AS Hemma, SUM(m.ResultatBorta) AS Borta,
SUM(m.Resultathemma-m.ResultatBorta) AS Diff,
CASE WHEN SUM(m.Resultathemma - m.Resultatborta) = 0 THEN
1
ELSE
CASE WHEN SUM(m.Resultathemma - m.Resultatborta) > 0 THEN
-2
ELSE
2
END
END AS Poang
FROM Match m INNER JOIN
Team t ON m.LagIdHemma = t.TeamId
WHERE m.MatchId = m.MatchId
GROUP BY m.LagIdHemma, t.Name
/Johan
Sv:SQL Fråga
<code>
SELECT tg.GroupID, t.Name, COUNT(m.ResultatHemma) AS S,
CASE
WHEN m.ResultatHemma - m.ResultatBorta > 0 THEN
COUNT(m.ResultatHemma)
ELSE 0
END AS V,
CASE
WHEN m.ResultatHemma - m.ResultatBorta = 0 THEN
COUNT(m.ResultatHemma)
ELSE 0
END AS O,
CASE
WHEN m.ResultatHemma - m.ResultatBorta < 0 THEN
COUNT(m.ResultatHemma)
ELSE 0
END AS F,
SUM(m.ResultatHemma) AS Hemma, SUM(m.ResultatBorta) AS Borta,
SUM(m.ResultatHemma - m.ResultatBorta) AS Diff,
CASE
WHEN m.ResultatHemma - m.ResultatBorta = 0 THEN 1
ELSE
CASE
WHEN m.ResultatHemma - m.ResultatBorta > 0 THEN 2
ELSE 0
END END AS P
FROM Match AS m INNER JOIN
Team AS t ON m.LagIdHemma = t.TeamId INNER JOIN
TeamInGroup AS tg ON m.LagIdHemma = tg.TeamId
WHERE (m.MatchId = m.MatchId) AND (tg.GroupID = 2 OR tg.GroupID = 1 OR tg.GroupID = 3)
GROUP BY t.Name, tg.GroupID, m.Resultathemma, m.ResultatBorta
ORDER BY P DESC, Diff DESC, S DESC
</code>
GroupID Name S V O F Hemma Borta Diff P
----------- ----------------- -------- -------- -------- -------- -------- -------- -------- --------
1 BK Örnen 1 1 0 0 16 4 12 2
3 Djurgårdens IF 1 1 0 0 16 4 12 2
3 Turebergs IF 1 1 0 0 16 4 12 2
1 Wåxnäs BC 1 1 0 0 16 4 12 2
Osv.
Men det tar upp alla matcher i tabellen match rad för rad. Skulle vilja grupperar den bara på Name,
Så den räknar alla poster i match där t.TeamId från TeamInGroup finns med.
Om t.ex BK Örnen spelat två matcher en vinst o en förlust så skall S bli 2 och V bli 1 och F bli 1
Hemma bli 20 o Borta 20 o Diff 0 Och P blir 2.
Skall man kanske använda sig av en SP för HemmaMatch och en SP för BortaMatch
Sedan slå ihop dessa SPn (hur man nu gör det) till en SP SerieResultat...
Kvarstår sedan ett Problem till GroupID!
I tabellen Team finns 18 Lag vara dom sex första lagen tillhör en serie som kallas Grupp A 7 -12 Grupp B och 13 - 18 Grupp C.
Men då skapar man väl SP:n GruppA, GruppB, GruppC?
GertSv: SQL Fråga
CASE
WHEN m.ResultatHemma - m.ResultatBorta > 0 THEN
COUNT(m.ResultatHemma)
ELSE 0
END AS V,
skriver
SUM(CASE
WHEN m.ResultatHemma - m.ResultatBorta > 0 THEN
COUNT(m.ResultatHemma)
ELSE 0
END) AS V,
osv för alla kolumner.
/Johan
Sv:SQL Fråga
'SUM' is not a recognized built-in function name.Sv:SQL Fråga
TeamId S V O F TOTAL P
----------- ----------- ----------- ----------- ----------- ------- -----------
30896 3 2 1 0 36-24 5
33768 3 2 0 1 37-23 4
33744 3 2 0 1 33-29 4
33684 3 2 0 1 31-29 4
33628 3 2 0 1 31-28 4
33894 2 2 0 0 30-10 4
33705 3 2 0 1 27-33 4
32186 3 1 1 1 27-33 3
33286 2 1 1 0 21-19 3
42031 3 1 0 2 27-32 2
43635 2 1 0 1 25-15 2
33407 3 1 0 2 24-36 2
31346 2 1 0 1 24-16 2
33290 2 1 0 1 23-16 2
33874 2 1 0 1 20-20 2
33737 3 0 1 2 25-35 1
33722 3 0 0 3 21-38 0
159120 3 0 0 3 18-44 0
Enligt följande sql
SELECT TeamId, COUNT(*) AS S,
SUM(CASE WHEN PointsFor > PointsAgainst THEN 1 ELSE 0 END) AS V,
SUM(CASE WHEN PointsFor = PointsAgainst THEN 1 ELSE 0 END) AS O,
SUM(CASE WHEN PointsFor < PointsAgainst THEN 1 ELSE 0 END) AS F,
STR(SUM(PointsFor), 3, 0) + '-' + CONVERT(varchar(3),
SUM(PointsAgainst)) AS TOTAL,
SUM(CASE WHEN PointsFor > PointsAgainst THEN 2 ELSE
CASE WHEN PointsFor = PointsAgainst THEN 1 ELSE 0 END END) AS P
FROM
(SELECT MatchId, LagIdHemma AS TeamId, Resultathemma AS PointsFor, ResultatBorta AS PointsAgainst
FROM Match
UNION ALL
SELECT MatchId, LagIdBorta AS TeamId, ResultatBorta AS PointsFor, Resultathemma AS PointsAgainst
FROM Match AS Match_1) AS view1
GROUP BY TeamId
ORDER BY P DESC, Total DESC, S DESC
Har fortfarande ett par smärre problem att lösa:
1. Om Laget spelar borta match och vinner eller förlorar eller spelar oavgjort.
Tittar man på TeamId 33737 så har det laget spelat 1 hemma och 2 Borta.
Hemmamatch spelades oavgjort och bortamatherna vinst.
Det skulle gett följande:
33737 3 2 1 0 35-25 5
och TeamId 30896 1 Hemmaseger, 1 Oavgjord och en förlust borta:
30896 3 1 1 1 34-26 3
Gert