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 <. Vad jag känner till kan man endast använda case i select satsen och inte i where clausen... Du kanske kan prova en dynamisk uppbyggnad av satsen, kolla t ex på http://www.sqlservercentral.com/columnists/rmarda/howtobuilddynamicstoredprocedures.asp Ett sätt att lösa det är att använda OR: Jag fick skriva en sådan sats för varje SELECT då fick jag med allt. men är inte problemet att du har två st else i din case?Hur skirver man en CASE i under WHERE ?
Tar jag bort över eller under 10 så får jag error 170 'Inncorect syntax near =
Här är hur jag gjort hitintills.
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:
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
Sv: Hur skirver man en CASE i under WHERE ?
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.Sv: Hur skirver man en CASE i under WHERE ?
Sv:Hur skirver man en CASE i under WHERE ?
<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.
/PelleSv: Hur skirver man en CASE i under WHERE ?
Men det blev många rader...
Tack för hjälpen! :)Sv:Hur skirver man en CASE i under WHERE ?