Jag hr den här sql-frågan som jag använt i Mysql Jag känner inte till MySQL syntaxen. Den verkar lite speciell. Alltså pratar vi om "resultatet av logiska jämförelse i select-delen"? Tack Ola.Hjälp med sql-fråga
<code>
SELECT s_deltagande_lag.ID, s_deltagande_lag.Namn,s_deltagande_lag.serie_id,
@games := Count(s_matcher.ID) AS games,
@win := Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)) AS win,
@tie := Sum(resultat_a=resultat_b) AS tie,
@lost := ((Count(s_matcher.ID))-(Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)))-(Sum(resultat_a=resultat_b))) as lost,
@poang:= ((Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b))*2) + (Sum(resultat_a=resultat_b))) AS poang,
@plus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) as plus,
@minus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as minus,
@plusminus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) - Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as plusminus
FROM s_deltagande_lag LEFT JOIN s_matcher ON s_deltagande_lag.ID=s_matcher.lagid_a Or s_deltagande_lag.ID=s_matcher.lagid_b
where s_deltagande_lag.serie_ID = 42 and s_matcher.uppdaterad = 1
GROUP BY ID, Namn ORDER BY 8 DESC, 11 DESC, 9 DESC, 10 ASC
</code>
Nu har jag försökt skriva om den till Mssql-server men får det inte att fugnera
<code>
Select
s.ID, s.Namn,
Count(s.ID) AS games,
-Sum((s.ID = m.lagid_a And m.resultat_a > m.resultat_b ) Or (s.ID = m.lagid_b And m.resultat_a < m.resultat_b)) AS win,
-Sum(m.resultat_a=m.resultat_b) AS tie,
-((Count(s.ID))-(Sum((s.ID=lagid_a And m.resultat_a > m.resultat_b )Or (s.ID=lagid_b And m.resultat_a < m.resultat_b)))-(Sum(m.resultat_a = ,.resultat_b))) as lost,
-((Sum((s.ID=lagid_a And m.resultat_a > m.resultat_b )Or (s.ID = m.lagid_b And m.resultat_a < m.resultat_b))*2) + (Sum(m.resultat_a = m.resultat_b))) AS poang,
-Sum((s.ID=lagid_a)* m.resultat_a + (s.ID=m.lagid_b)* m.resultat_b) as plus,
-Sum((s.ID=lagid_a)* m.resultat_b + (s.ID=m.lagid_b)* m.resultat_a) as minus,
-Sum((s.ID=lagid_a)* m.resultat_a + (s.ID=m.lagid_b)* m.resultat_b) - Sum((s.ID=lagid_a)* m.resultat_b + (s.ID= m.lagid_b)* m.resultat_a) as plusminus
FROM s_deltagande_lag s LEFT JOIN s_matcher m
On s.ID=m.lagid_a Or s.ID=m.lagid_b
where s.serie_ID = @SerieID and m.uppdaterad = 1
Group by s.ID, s.Namn
Order by 7 DESC, 10 DESC, 8 DESC, 9 ASC
</code>
Felmeddelande
<code>
Incorrect Syntax Near '=' På rad 4
</code>
Rad 4 är
<code>
-Sum((s.ID = m.lagid_a And m.resultat_a > m.resultat_b ) Or (s.ID = m.lagid_b And m.resultat_a < m.resultat_b)) AS win,
</code>Sv: Hjälp med sql-fråga
Det tror jag icke är möjligt i T-SQL på det sättet.
Jag tror du ska spana efter syntaxen "SELECT CASE WHEN ..."
(kolla i T-Sql hjälpen).
OlaSv: Hjälp med sql-fråga
Löste det så här
<code>
Select
s.ID, s.Namn,s.serie_id,
Count(s.ID) AS games,
sum(case when (s.ID = m.lagid_a And m.resultat_a > m.resultat_b ) Or (s.ID = m.lagid_b And m.resultat_a < m.resultat_b) then 1 else 0 end) as win,
sum(case when (resultat_a = resultat_b) then 1 else 0 end) as tie,
((Count(s.ID))-(sum(case when (s.ID = m.lagid_a And m.resultat_a > m.resultat_b ) Or (s.ID = m.lagid_b And m.resultat_a < m.resultat_b) then 1 else 0 end)+sum(case when (resultat_a = resultat_b) then 1 else 0 end))) as lost,
((sum(case when (s.ID = m.lagid_a And m.resultat_a > m.resultat_b ) Or (s.ID = m.lagid_b And m.resultat_a < m.resultat_b) then 1 else 0 end) *2) + sum(case when (resultat_a = resultat_b) then 1 else 0 end)) as poang,
Sum((case when s.id = m.lagid_A then 1 else 0 end)*m.resultat_a +(case when s.id = m.lagid_b then 1 else 0 end)*m.resultat_b) as plus,
Sum((case when s.id = m.lagid_A then 1 else 0 end)*m.resultat_b +(case when s.id = m.lagid_b then 1 else 0 end)*m.resultat_a) as minus,
(Sum((case when s.id = m.lagid_A then 1 else 0 end)*m.resultat_a +(case when s.id = m.lagid_b then 1 else 0 end)*m.resultat_b)-Sum((case when s.id = m.lagid_A then 1 else 0 end)*m.resultat_b +(case when s.id = m.lagid_b then 1 else 0 end)*m.resultat_a)) as plusminus
FROM s_deltagande_lag s LEFT JOIN s_matcher m
On s.ID=m.lagid_a Or s.ID=m.lagid_b
where s.serie_ID = @SerieID and m.uppdaterad = 1
Group by s.ID, s.Namn,s.serie_id
order by poang desc, Plusminus Desc, Plus Desc
</code>