2017-02-07 4 views
1

Ich verwende derzeit Microsoft SQL Server. Ich versuche mit Case-Ausdrücken in meiner Sicht zu arbeiten, um einen Bereich zu erstellen. HierSQL-Case-Ausdruck zum Erstellen eines Bereichs

ein Beispiel: 22.67-88.23:

  • Der Bereich Minimum nicht unter 0
  • Der Bereich Maximum über 100
  • nicht erwartet werden kann Ausgabe IE sein kann.

Hier ist, was ich versucht habe.

CONVERT(varchar(12) 
     ,(CASE WHEN (X.AVG - (2 * X.AVG)) < 0 
      THEN 0 
      END 
     + '-' 
     + CASE WHEN (X.AVG + (2 * X.AVG)) > 100 
      THEN 100 
      END 
     )) as Range 
+0

Fallausdrücke, keine Aussagen. – jarlh

+0

@jarlh Danke für den Tipp. Ich habe meine Frage angepasst. – Brad

+0

Was ist das "Problem auf der als Teil"? –

Antwort

1

Auf der Oberseite der fehlenden Klammern Sie da bearbeitet in haben, müssen Sie auch eine else Klausel enthalten, wie Ihre Version keinen Wert zurückgeben, wenn Ihre Berechnung über 0 im ersten case oder unter 100 ist in Ihrem zweiten:

CONVERT(varchar(12) 
     ,(CASE WHEN (X.AVG - (2 * X.AVG)) < 0 
      THEN 0 
      ELSE X.AVG - (2 * X.AVG) 
      END 
     + '-' 
     + CASE WHEN (X.AVG + (2 * X.AVG)) > 100 
      THEN 100 
      ELSE X.AVG - (2 * X.AVG) 
      END 
     ) 
     ) as Range 
+0

Ich habe einen 'arithmetischen Überlauffehler' zu erreichen, der varchar in den numerischen Datentyp konvertiert, mit dem Sie antworten. Dies liegt an Berechnungen auf einem Varchar. Ich habe den CONVERT sowohl auf den 'Then' als auch auf 'Else'-Ausdruck eingestellt. – Brad

1

Sie können diesen gesamten Fall Ausdruck zu diesem massiv zu vereinfachen. Es kann sein, was Sie eigentlich wollen, da es Ihrer schriftlichen Erklärung zu widersprechen scheint, aber es ist logisch das Gleiche, was Sie selbst codiert haben.

case 
    when X.AVG * 3 > 100 then '100' 
    when X.AVG > 0 then '0' 
    else 'Invalid' --Or maybe you want to put convert(varchar(12), X.AVG) here? 
end 
Verwandte Themen