Hur skirver man en CASE i under WHERE ?
Håller på med min invecklade SELECT och har fått till det mesta. men nu vill jag kunna via en dropdown list kunna välja ut en specifik omgång eller över 10 eller under 10. Testat följande men får error 170 inccorect syntaxl near <.
Tar jag bort över eller under 10 så får jag error 170 'Inncorect syntax near =
Här är hur jag gjort hitintills.
1 2 3 4 | WHERE Case WHEN @OmgangsVal = 1 THEN r.Omgang <10 ELSE @OmgangsVal = 2 THEN r.Omgang >10 ELSE Omgang = @OmgangsVal END |
Hela min SELECT som följer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | CREATE PROCEDURE Ubc_Totalt @OmgangsVal Int AS SET NOCOUNT ON; SELECT TOP 100 PERCENT s.Namn + ' ' + s.ENamn, SUM(r.Serier) AS [Antal serier], CAST(SUM(r.Resultat * 1.0) / SUM(r.Serier) AS Decimal(5 , 2)) AS Snitt, SUM(r.Poang) AS Poäng, (SELECT SUM(Serier) FROM resultat WHERE Spelare = s.ID AND H_B = 'H' ) AS [Serier hemma], (SELECT CAST(SUM(Resultat * 1.0) / SUM(Serier) AS Decimal(5, 2)) FROM resultat r WHERE Spelare = s.ID AND H_B = 'H' )AS [Snitt Hemma], (SELECT SUM(Poang) FROM resultat WHERE Spelare = s.ID AND H_B = 'H' ) AS [Poäng Hemma], (SELECT SUM(Serier) FROM resultat WHERE Spelare = s.ID AND H_B = 'B' ) AS [Serier borta], (SELECT CAST(SUM(Resultat * 1.0) / SUM(Serier) AS Decimal(5, 2)) FROM resultat WHERE Spelare = s.ID AND H_B = 'B' )AS [Snitt Borta], (SELECT SUM(Poang) FROM resultat WHERE Spelare = s.ID AND H_B = 'B' ) AS [Poäng Borta], CAST(SUM(r.Poang * 1.0) / SUM(r.Serier)AS Decimal(5, 2))AS [Poäng Snitt], MAX(r.Resultat) AS Bästa, Min(Case When r.serier=4 then r.resultat else Null end) AS [Sämsta] FROM tuser1316.medlemmar s INNER JOIN tuser1316.Resultat r ON s.ID = r.Spelare WHERE (Case WHEN @OmgangsVal = 1 THEN r.Omgang <10 ELSE @OmgangsVal = 2 THEN r.Omgang >10 ELSE Omgang = @OmgangsVal END) GROUP BY s.Namn + ' ' + s.ENamn, s.ID ORDER BY ROUND(SUM(r.Resultat) / SUM(r.Serier * 1.0), 2, 1) DESC GO |
Gert
Svara
Sv: Hur skirver man en CASE i under WHERE ?
Vad jag känner till kan man endast använda case i select satsen och inte i where clausen...
Hinner tyvärr inte titta närmare på din fråga just nu om hur du ska göra istället men se om du kan skriva om case i select istället eller kanske använda Having.
Svara
Sv: Hur skirver man en CASE i under WHERE ?
Du kanske kan prova en dynamisk uppbyggnad av satsen, kolla t ex på http://www.sqlservercentral.com/columnists/rmarda/howtobuilddynamicstoredprocedures.asp
Svara
Sv:Hur skirver man en CASE i under WHERE ?
Ett sätt att lösa det är att använda OR:
<CODE>
...
WHERE
(@OmgangsVal = 1 AND r.Omgang <10)
OR
(@OmgangsVal = 2 AND r.Omgang >10)
OR
(@OmgangsVal <> 2 AND @OmgangsVal <> 1 AND Omgang = @OmgangsVal)
...
</CODE>
Detta kan dock vara en risk om sql-frågan är prestandakritisk då OR-satser lätt drar ner prestanda.
/Pelle
Svara
Sv: Hur skirver man en CASE i under WHERE ?
Jag fick skriva en sådan sats för varje SELECT då fick jag med allt.
Men det blev många rader...
Tack för hjälpen! :)
Svara
Sv:Hur skirver man en CASE i under WHERE ?
men är inte problemet att du har två st else i din case?
Svara