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


SQL Fråga

Postades av 2007-09-18 06:50:33 - Gert Lindholm, i forum sql-server/msde, Tråden har 10 Kommentarer och lästs av 1196 personer

Försöker att bygga en serietabell. Men fastnar på hur man ska kunna tilldela poäng för matchen:
<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'.


Svara

Sv: SQL Fråga

Postades av 2007-09-18 07:51:45 - Johan Djupmarker

Varför har du med "AS Poang"? Ser lite skumt ut... Testa såhär istället:

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


Svara

Sv:SQL Fråga

Postades av 2007-09-18 08:27:15 - Gert Lindholm

Jag har ingen kolumn som heter Poäng, och trodde att man skapade en med AS...


Svara

Sv: SQL Fråga

Postades av 2007-09-18 08:35:18 - Jonas Sevelin

SUM(xxx) skapar kolumnen, AS använder du bara för att döpa den.


Svara

Sv:SQL Fråga

Postades av 2007-09-18 08:42:05 - Gert Lindholm

Menar du så här?

SUM(m.Resultathemma - m.Resultatborta AS Poang)
Det fungerade inte.

Vill få ut en serietabell
Lag Antmatcher V O F Diff Poäng


Svara

Sv: SQL Fråga

Postades av 2007-09-18 09:23:46 - Jonas Sevelin

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.


Svara

Sv: SQL Fråga

Postades av 2007-09-18 09:54:45 - Johan Djupmarker

Kollade lite i dokumentationen nu, såhär ska det nog se ut:

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


Svara

Sv:SQL Fråga

Postades av 2007-09-19 01:53:22 - Gert Lindholm

Har byggt vidare på ditt förslag till serietabell och nu kommit fram till följande:

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

Gert


Svara

Sv: SQL Fråga

Postades av 2007-09-19 07:43:45 - Johan Djupmarker

Vad händer om du istället för

    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


Svara

Sv:SQL Fråga

Postades av 2007-09-19 08:25:09 - Gert Lindholm

Msg 195, Level 15, State 10, Line 2
'SUM' is not a recognized built-in function name.


Svara

Sv:SQL Fråga

Postades av 2007-09-21 17:27:16 - Gert Lindholm

Nu har jag fått fram följande resultat:

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


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